【发布时间】:2016-10-18 13:35:10
【问题描述】:
可以使用 lambda 表达式定义匿名函数:
-- Contrived example
> apply f x = f x
> apply (\n -> n + 1) 3
4
但是可以定义一个匿名的递归函数吗?
> apply (\n -> n * ??? (n - 1)) 3 -- compute a factorial
6
【问题讨论】:
标签: haskell
可以使用 lambda 表达式定义匿名函数:
-- Contrived example
> apply f x = f x
> apply (\n -> n + 1) 3
4
但是可以定义一个匿名的递归函数吗?
> apply (\n -> n * ??? (n - 1)) 3 -- compute a factorial
6
【问题讨论】:
标签: haskell
导入Data.Function 并使用fix 函数计算一个非递归函数的不动点,该函数将递归应用函数作为参数
> import Data.Function
> :t fix
fix :: (a -> a) -> a
> apply (fix $ \f n -> if n == 0 then 1 else n * f (n - 1)) 3
6
【讨论】: