代码意味着Haskell 99问题

时间:2016-05-04 15:17:34

标签: list haskell functional-programming fold

我一直在研究99个Haskell问题挑战和问题解决方案之一。 3 - 获取列表的第k个元素,从1开始计数,而不是0 - 是:

<a href="#" class="btn btn-default" data-toggle="buttons">
    Public
    <input type="radio" name="is_private" value="0" />
</a>

我理解,给定一个列表,我们可以执行(n - 1)elementAt''' xs n = head $ foldr ($) xs $ replicate (n - 1) tail 次操作,最终列表的第一个元素就是我们要查找的那个。在编写时,tail的累加器的初始值是给定的列表,但是我无法识别第二个参数,它应该是一个列表,对吗?

如果您解释了foldr的第一步,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

list参数是replicate (n - 1) tail,这是一个包含函数tail (n-1)次的列表。因此,我们将($)作为函数,xs作为初始元素,[tail, tail, ..., tail]作为列表。所以折叠的结果是tail $ tail $ ... $ tail $ xs