【发布时间】:2021-12-06 10:22:13
【问题描述】:
您好,我有这个函数的两个版本,但遇到了一些问题。
iter :: Int -> (a -> a) -> (a -> a)
iter n f
| n > 0 = f . iter (n-1) f
| otherwise = id
iter' :: Int -> (a -> a) -> (a -> a)
iter' n = foldr (.) id . replicate n
即使在谷歌上搜索 id 在这里实际上做了什么之后,我也无法理解。
例如,如果我们使用n = 3 和f x = x+1 来处理函数。
当我们遍历整个 n 并到达 id 被调用时,我们的变量会发生什么?
我是一个非常大的新手,所以请您尽可能简单地解释一下。
【问题讨论】:
-
这是一个有点复杂的表达方式,初学者一下子就明白了。也许离开一段时间,然后在一周左右回来。
id不是问题:您可能很清楚这是由id x = x定义的恒等函数。相反,您正在查看函数的递归组合,一开始很难理解。 -
id是函数组合的标识,如(f . id) x == (id . f) x == f x,因此它与0的作用相同,用于添加。比较foldr (.) id和foldr (+) 0。