2017-06-01 36 views
-2

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 
+4

Lesen Sie https://en.wikipedia.org/wiki/Church_encoding –

+2

Welche Gedanken haben Sie über das Problem? Was hast du probiert? Wo ist es schiefgelaufen? –

+0

Versuchen Sie mit 'zero f x = x' und' nextnfx = f (nfx) ' – Bergi

Antwort

4

Danke Evan und Bergi, nach dem Lesen der Kirche Codierung, fand ich die Antwort.

zero :: Number t 
zero f x = x 

next :: Number t -> Number t 
next n f x = f (n f x) 

plus :: Number t -> Number t -> Number t 
plus m n f x = m f (n f x) 
Verwandte Themen