【发布时间】:2010-10-30 04:40:48
【问题描述】:
考虑以下 (Haskell) 代码:
fib=0:1:zipWith (+) fib (tail fib)
一位同事试图断言这不是一个递归函数,因为fib 只是一个用自身定义自身的列表,并且在某种程度上不同于执行相同操作的函数。我认为他在吸食快克。
你怎么看?
【问题讨论】:
-
printf "哦,不,零参数的函数,我们不能拥有它!"或死;
-
zipWith是递归函数,fib指的是它的结果。它没有什么神奇或非递归的。 (下面声称“没有功能”的答案和你的同事一样困惑。) -
你的同事朋友正在挑剔。从技术上讲,它是一个递归定义的值,而不是一个函数。
-
Piet,你的定义是非标准的。不要假设每个人都错了,因为他们都使用相同的定义,而这恰好与您的不匹配。
-
Carl:我不确定你指的是什么,但递归函数和递归数据结构在 Haskell 中定义得非常好。查看关于"Tying the Knot" 和相关主题的任意数量的论文和著作。