我是Haskell和函数式编程的新手。我正在尝试使用函数和“加号”函数实现自然数。我有一个无法更改的给定类型。
type Number t = (t -> t) -> t -> t
因此我必须实现一个代表数字0的“零”函数,一个“下一个” 返回下一个数字和“加”功能的函数。
zero :: Number t
zero x = ???
next :: Number t -> Number t
next n = \f z -> ???
plus :: Number t -> Number t -> Number t
plus x y = ???
实施后我应该能够测试一下:
one :: Number t
one = next zero
tesOne = one (+ 1) 0
two :: Number t
two = plus (next zero) (next zero)
testTwo = (+ 5) 0
在此代码中,“testOne”应为1,“testTwo”应为10。 谢谢你抽空看看!
我尝试了这个,但我想我还不太了解功能编程。
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
答案 0 :(得分:4)
感谢Evan和Bergi,在阅读了Church编码之后,我找到了答案。
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)