你如何在Haskell中编写函数'pair'?

时间:2010-03-30 15:37:03

标签: list haskell tuples

对功能需要做这样的事情:

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

4 个答案:

答案 0 :(得分:42)

pairs [] = []
pairs xs = zip xs (tail xs)

答案 1 :(得分:20)

你可以走到

import Control.Applicative (<*>)
pairs = zip <*> tail

pairs xs = zip xs (tail xs)

可能更清楚。

答案 2 :(得分:6)

为了完整性,使用显式递归的更“低级”版本:

pairs (x:xs@(y:_)) = (x, y) : pairs xs
pairs _          = []

构造x:xs@(y:_)表示“包含头部x的列表,以及包含至少一个元素xs”的尾部y。这是因为y兼作当前对的第二个元素和下一个元素的第一个元素。否则,我们必须为长度为1的列表制作一个特殊情况。

pairs [_] = []
pairs []  = []
pairs (x:xs) = (x, head xs) : pairs xs

答案 3 :(得分:2)

致电阿兹特克神连续数字:

import Control.Monad (ap)
import Control.Monad.Instances() -- for Monad ((->) a)

foo = zip`ap`tail $ [1,2,3,4]