实现自然数

时间:2017-06-01 15:19:10

标签: haskell functional-programming

我是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

1 个答案:

答案 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)