【发布时间】:2011-10-31 18:11:16
【问题描述】:
我不确定这是否是一种好的编程习惯,但我想知道是否可以使用 lambda 表达式定义递归函数。
这是我编的一个人为的例子:所以可以在Haskell中递归定义阶乘函数如下
factorial :: Integer -> Integer
factorial 1 = 1
factorial (n + 1) = (n + 1) * factorial n
现在,我想要一个函数f,这样f n = (factorial n) + 1。我不想使用factorial n 的名称(即事先定义它),而是想定义f,其中factorial n 在f 的定义中被赋予了一个lambda 表达式。我可以在f 中使用递归 lambda 定义来代替使用名称阶乘吗?
【问题讨论】:
-
为什么不给它起个名字呢?它不必是全局名称,有
let和where。 -
顺便说一句,请注意,
factorial定义中使用的n+k模式是removed from the language as of Haskell 2010。建议停止使用它们。 -
附注我更喜欢基本情况 0:
factorial 0 = 1,这将允许它为多个数字工作 -
@delnan:我猜你不会喜欢我的代码,因为几乎所有代码都导入了
Data.Function (fix)