【发布时间】:2010-07-16 15:45:52
【问题描述】:
我写了以下两个函数。
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
Pair 将采用成对的元素并将它们组成 2 元组。如果列表有奇数个元素,则丢弃最后一个。取消配对是配对的反面。
这些工作,但想知道是否有更简洁的方式来编写这些。
【问题讨论】:
-
这可能有点冗长,但我会说与迄今为止的答案相比,它在清晰度方面胜出。 (无意冒犯这些作者。)
-
我认为这里的要点是,列表上的 everyOther 函数会很有用,因为人们确实倾向于使用 zip 方法。 Hackage 上的 splits 包有 splitEvery 这将使这种解决方案更加明显。
-
讨厌这么说,但对于我迄今为止看到的替代方案:我说的是简洁,而不是迟钝。 :(
标签: haskell coding-style tuples