Haskell99题中的代码含义
Code meaning in Haskell 99 problems
我一直在研究第 99 Haskell 题挑战和第 1 题的解决方案之一。 3 - 获取列表的第 k 个元素,从 1 开始计数,而不是 0 - 是:
elementAt''' xs n = head $ foldr ($) xs $ replicate (n - 1) tail
我知道,给定一个列表,我们可以执行 (n - 1) tail
次操作,最终列表的第一个元素就是我们要查找的元素。正如所写,foldr
的累加器的初始值是给定的列表,但我无法识别第二个参数,它应该是一个列表,对吧?
如果您能解释一下 foldr
的第一步,我将不胜感激。
列表参数是replicate (n - 1) tail
,这是一个包含函数tail
(n-1)
次的列表。所以我们有 ($)
作为函数,xs
作为初始元素,[tail, tail, ..., tail]
作为列表。所以折叠的结果是tail $ tail $ ... $ tail $ xs
.
我一直在研究第 99 Haskell 题挑战和第 1 题的解决方案之一。 3 - 获取列表的第 k 个元素,从 1 开始计数,而不是 0 - 是:
elementAt''' xs n = head $ foldr ($) xs $ replicate (n - 1) tail
我知道,给定一个列表,我们可以执行 (n - 1) tail
次操作,最终列表的第一个元素就是我们要查找的元素。正如所写,foldr
的累加器的初始值是给定的列表,但我无法识别第二个参数,它应该是一个列表,对吧?
如果您能解释一下 foldr
的第一步,我将不胜感激。
列表参数是replicate (n - 1) tail
,这是一个包含函数tail
(n-1)
次的列表。所以我们有 ($)
作为函数,xs
作为初始元素,[tail, tail, ..., tail]
作为列表。所以折叠的结果是tail $ tail $ ... $ tail $ xs
.