Ich bin neu in Haskell und funktionale Programmierung. Ich versuche Natural-Nummern mit Funktionen und einer "Plus" -Funktion zu implementieren. Ich habe einen bestimmten Typ, der nicht geändert werden kann.Implementieren von natürlichen Zahlen
type Number t = (t -> t) -> t -> t
Dafür habe ich eine „Null“ Funktion zu implementieren, die Zahl 0, ein „next“ Funktion darstellt, die nächste Nummer und ein „Plus“ -Funktion gibt.
one :: Number t
one = next zero
tesOne = one (+ 1) 0
two :: Number t
two = plus (next zero) (next zero)
testTwo = (+ 5) 0
In diesem Code "testone" sollte 1 und "testTwo" sollte 10. Thank you Zeit nehmen, zu suchen:
zero :: Number t
zero x = ???
next :: Number t -> Number t
next n = \f z -> ???
plus :: Number t -> Number t -> Number t
plus x y = ???
Nach den Vorschriften zur Umsetzung ich sollte diese testen können !
Ich habe das versucht, aber ich denke, ich verstehe noch nicht ganz funktional-Programmierung.
zero :: Number t
zero x = (\f ->f) x
next :: Number t -> Number t
next n = \f z -> f z
plus :: Number t -> Number t -> Number t
plus x y = (\f x y -> x + y) x y
Lesen Sie https://en.wikipedia.org/wiki/Church_encoding –
Welche Gedanken haben Sie über das Problem? Was hast du probiert? Wo ist es schiefgelaufen? –
Versuchen Sie mit 'zero f x = x' und' nextnfx = f (nfx) ' – Bergi