对功能需要做这样的事情:
pairs [1, 2, 3, 4] -> [(1, 2), (2, 3), (3, 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]