List-difference operator i Haskell

Permalänk
Medlem

List-difference operator i Haskell

Jag håller på och lär mej Haskelln igen till en omtenta och har stöt på ett uttryck som jag inte har sett förut och har tyvärr inte med mej haskell boken så jag tänkte om det är någon vänlig person här som kan förklara lite.
Detta är inte läxa/uppgift eller något annat, så jag försöker inte fuska eller nått. Vill bara har lite hjälp med inlärningen

isPermutation :: Eq a => [a] -> [a] -> Bool isPermutation [] ys = null ys isPermutation (x:xs) ys = x `elem` ys && isPermutation xs (ys \\ [x])

Vad gör den fet-stilade texten för något, mer specifikt "\\" ?

Visa signatur

"Maybe one day you will learn that your way, is not the only way"

Permalänk
Medlem

Av det Hoogle säger verkar det vara Data.List.\\.

Men dokumentationen för Data.List.\\ är ganska förvirrande :). Testade i ghci lite:

Prelude> [1,2,2,3,10] Data.List.\\ [1] [2,2,3,10] Prelude> [1,2,2,3,10] Data.List.\\ [2] [1,2,3,10] Prelude> [1,2,2,3,10] Data.List.\\ [10] [1,2,2,3]

Så först kollar funktionen om ys innehåller x, och om den nu gör det så tar den bort den första förekomsten av x ur ys och anropar sig själv med resultatet av det (och xs) som argument.

Permalänk
Medlem

Okej, tack så mycket.

Visa signatur

"Maybe one day you will learn that your way, is not the only way"

Permalänk
Glömsk

cic: Du vet säkert detta redan, men du behöver inte skriva ut modulen där funktionen ligger:

Prelude> :module +Data.List Prelude Data.List> [1,2,2,3,10] \\ [1,2] [2,3,10]

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Psionicist
cic: Du vet säkert detta redan, men du behöver inte skriva ut modulen där funktionen ligger:

Jo, men i detta fall blev det färre tangenttryckningar genom att bläddra och ändra i historiken istället för att göra som du gjorde.

Redigering: måste för övrigt säga att funktionen (isPermutation alltså) är ganska lustigt skriven, känns som att det borde finnas ett effektivare/snyggare sätt.