unj*_*nj2 19 haskell tuples list
对函数需要做这样的事情:
pairs [1, 2, 3, 4] -> [(1, 2), (2, 3), (3, 4)]
Run Code Online (Sandbox Code Playgroud)
Die*_*Epp 42
pairs [] = []
pairs xs = zip xs (tail xs)
Run Code Online (Sandbox Code Playgroud)
Edw*_*ETT 20
你可以走得那么远
import Control.Applicative (<*>)
pairs = zip <*> tail
Run Code Online (Sandbox Code Playgroud)
但
pairs xs = zip xs (tail xs)
Run Code Online (Sandbox Code Playgroud)
可能更清楚.
仅仅为了完整性,使用显式递归的更"低级"版本:
pairs (x:xs@(y:_)) = (x, y) : pairs xs
pairs _ = []
Run Code Online (Sandbox Code Playgroud)
该构造x:xs@(y:_)意味着"具有头部的列表x,以及xs具有至少一个元素的尾部y".这是因为y当前对的第二个元素和下一个元素的第一个元素都是双倍的.否则,我们必须为长度为1的列表创建一个特例.
pairs [_] = []
pairs [] = []
pairs (x:xs) = (x, head xs) : pairs xs
Run Code Online (Sandbox Code Playgroud)