我正在尝试使用高阶函数重新创建阶乘函数,例如 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/