【发布时间】:2021-08-13 20:46:29
【问题描述】:
在尝试定义与重复评估相对应的 Haskell 函数时,我遇到了“方程给出不同的数量”错误。这是我的代码:
nEvals :: Int -> (a -> a) -> a -> a
nEvals 1 = ($) --equivalent to nEvals 1 f x = f x
nEvals k f = (nEvals (k - 1) f) . f --equivalent to nEvals k f x = nEvals (k - 1) f (f x)
我不太明白为什么 Haskell 会给出这个错误,因为我使用的是模式匹配,而不是为给定的一组输入明确分配一个值。也许 Haskell 只允许对固定数量的参数进行模式匹配?如果是这样,有人可以解释为什么做出这个决定吗?
【问题讨论】:
-
您可以跳过模式匹配并将其视为折叠:使用
replicate列出k函数,然后使用foldr (.) id将它们组合成一个函数。 -
我相信这个问题是重复的,因此我关闭了它。如果您不同意,并且认为您的问题更细微,请随时解释原因,以便我们可以投票重新开放。
-
@chepner,哦,好主意!没想到,谢谢!
-
@chi,对不起,这和我想问的一样,我一定错过了这个问题。
-
@PrimeNumbers 完全没问题 :) 。我的不是抱怨——我只是想确保我没有太仓促地关闭它。
标签: haskell