2011-01-04 6 views

Antwort

10

: ist der "Nachteile" -Operator und erstellt eine neue Liste, deren Kopf ist der Wert auf der linken Seite des Betreibers und dessen Schwanz ist der Wert auf der rechten Seite des Betreibers. Somit ist 0 : [1, 2, 3] die Liste [0, 1, 2, 3].

prüft das Verhalten dieser Funktion durch f 1 0 Auswertung wie folgt:

f 1 0 = 0 : f 3 1 

d.h. f 1 0 ist das Ergebnis eine neue Liste zu schaffen, bestehend aus 0 am Kopf und die Liste nach f 3 1 als tail zurückgegeben. In ähnlicher Weise ist f 3 1 wie folgt:

f 3 1 = 1 : f 5 4 

f 3 1 d.h. das Ergebnis ist eine neue Liste zu schaffen, bestehend aus 1 am Kopf und die Liste nach f 5 4 als tail zurückgegeben.

Die Funktion erstellt also rekursiv eine Liste. Außerdem ist es unendlich tail-rekursiv (da es keine abschließende Bedingung hat) und ergibt somit eine unendlich lange Liste.

Wie für die erste Linie, f :: Integer -> Integer -> [Integer], zeigt dies an, dass f eine Funktion, die zwei ganze Zahlen nimmt (Integer -> Integer) und gibt eine Liste von ganzen Zahlen ([Integer]). Streng genommen nimmt f eine Ganzzahl (Integer) und gibt eine andere Funktion zurück, die eine ganze Zahl annimmt und eine Liste von Ganzzahlen (Integer -> [Integer]) als Ergebnis der Funktion Currying zurückgibt. Dies ist ein Konzept, mit dem Sie vertraut werden, wenn Sie Haskell und andere funktionale Programmiersprachen näher kennenlernen.

5

Der Code in Ihrer Frage tut nichts, weil er einen Typfehler und einen Syntaxfehler enthält.

f :: Integer -> Integer --> [Integer] 

Wie Sie aus der Hervorhebung der letzte Bit sehen kann, ist ein Kommentar, weil -- Kommentar in Haskell beginnt. Als Konsequenz ist der deklarierte Typ von fInteger -> Integer, was falsch ist. Um diese Änderung zu beheben --> zu ->.

f i n = n : f (i+2) (n+i] 

Hier haben Sie eine Öffnung ( und dann einen Schließ ]. Offensichtlich ist das falsch. Um diese Änderung zu beheben (n+i] zu (n+i).

Jetzt, dass das erledigt ist, ist hier, was der feste Code tut:

: ist ein Konstruktor für den Listentyp. x : xs ist die Liste, die x als ihren Kopf und xs als ihren Schwanz hat. n : f (i+2) (n+i) wird geparst als n : (f (i+2) (n+i)) (nicht (n : f) (i+2) (n+1), wie Sie zu glauben scheinen). Es erstellt also eine Liste, deren Kopf n ist und deren Schwanz das Ergebnis f (i+2) (n+1) ist.

Verwandte Themen