haskell:使用高阶函数的阶乘

标签 haskell

我正在尝试使用高阶函数重新创建阶乘函数,例如 fac 1 = 1、fac 2 = 2、fac 3 = 6,但我运气不佳。无论我给出什么输入,我的折叠函数都会不断返回空列表。谁能帮帮我吗?

这是我到目前为止所拥有的:

fold f a [] = []
fold f a (x:xs) = fold f (f a x) xs


fac n = fold (*) 1 [1..n]

最佳答案

fold 返回空列表,因为其基本情况返回空列表,并且递归步骤永远不会对递归结果执行任何操作。显然,至少其中一件事需要改变,在这种情况下,这应该是基本情况:

fold f a [] = a

或者,您可以只使用 foldl 本身,而不是尝试重新实现它。

关于haskell:使用高阶函数的阶乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19738272/

相关文章:

haskell - <$> 和 fmap 的区别

string - 为什么在尝试将字符串添加到此字符串的末尾时,haskell 会停止?

Haskell --> F# : Turner's Sieve

haskell - 使用堆栈实现撤消和重做功能。如何编辑堆栈而无需在 Haskell 中重新创建它

haskell - 使用标准 AST 实现兄弟融合

haskell - GHCi 调试器中的自由变量

haskell - haskellmode-vim 死了吗?

haskell - 在 haskell 中定义自定义编译指示

haskell - "illegal type synonym family"的解释

Haskell:尝试对简单的 State monad get 和 put 进行脱糖