qre*_*est 7 haskell coding-style tuples
我写了以下两个函数.
pair :: [a] -> [(a, a)]
pair [] = []
pair [x] = []
pair (x1:x2:xs) = (x1, x2) : pair xs
unpair :: [(a, a)] -> [a]
unpair [] = []
unpair ((x1, x2):xs) = x1 : x2 : unpair xs
Run Code Online (Sandbox Code Playgroud)
对将采用成对元素并制作它们的2元组.如果列表具有奇数个元素,则丢弃最后一个元素.Unpair是对的反面.
这些工作,但想知道是否有更简洁的方式来写这些.
单行:
pair xs = map snd . filter fst . zip (iterate not True) $ zip xs (drop 1 xs)
unpair = concatMap (\(x,y) -> [x,y])
Run Code Online (Sandbox Code Playgroud)
您也可以缩写您的定义pair:
pair (x1:x2:xs) = (x1, x2) : pair xs
pair _ = []
Run Code Online (Sandbox Code Playgroud)