gpt4 book ai didi

haskell - 这个函数中的 xs 是如何工作的?

转载 作者:行者123 更新时间:2023-12-05 08:16:37 27 4
gpt4 key购买 nike

我正在阅读 Hutton 的书 Programming in Haskell。这是一个函数:

pairs :: [a] -> [(a,a)]

pairs xs = zip xs (tail xs)

例如

>pairs [1,2,3,4]

>[(1,2),(2,3),(3,4)] --result

问题是如何读取这个函数?从左到右?

我很困惑“tail”如何留下 1 个元素,然后使用“zip”将其与下一个元素组合既然“尾部”应该从列表中获取所有剩余元素,对吗?

最佳答案

我还没有读过你提到的那本书,但我会尽力解释我所知道的。

关于 tail 函数返回列表第一个元素以外的所有内容,你是对的。让我们看看 zip 是如何工作的,

zip [1, 2, 3, 4] [5, 6, 7, 8]

给予,

[(1, 5), (2, 6), (3, 7), (4, 8)]

现在,从已有的输入考虑我们需要的输出,观察从输入到输出所需的转换,

[1, 2, 3, 4] -> [(1,2),(2,3),(3,4)]

从上面的zip应用,我们可以看到我们需要的输出可以通过调用zip获得,

zip [1, 2, 3] [2, 3, 4]

现在,来自 docs on zip function ,我们可以看到,如果给定的两个列表长度不等,则丢弃较长列表中的额外项目。所以,我们会得到相同的结果,

zip [1, 2, 3, 4] [2, 3, 4]

其中第一个输入列表中的最后 4 将被丢弃,我们得到我们想要的结果。

这可以写成一个函数,

pairs xs = zip xs (tail xs)

如果您对其他事情感到困惑,请告诉我。

关于haskell - 这个函数中的 xs 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16746372/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com