List-difference operator i Haskell

Trädvy Permalänk
Medlem
Plats
Origin
Registrerad
Aug 2003

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 "\\" ?

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

Trädvy Permalänk
Medlem
Registrerad
Jan 2005

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.

Trädvy Permalänk
Medlem
Plats
Origin
Registrerad
Aug 2003

Okej, tack så mycket.

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

Trädvy Permalänk
Glömsk
Plats
Userland
Registrerad
Jul 2001

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]

...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.

Trädvy Permalänk
Medlem
Registrerad
Jan 2005
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.