在给定输入的情况下,我试图获取输出
> halve [1,2,3,4,5,6]
([1,2,3],[4,5,6])
我已经使用这种方法解决了这个问题:
halve xs = ((take s xs), (drop s xs))
where
s = (length xs) `div` 2
我是Haskell的初学者,我想学习如何使用模式匹配解决此问题?谢谢
答案 0 :(得分:5)
您可以使用hare and tortoise algorithm的变体。该算法基本上是通过两个迭代器在列表上运行的:兔子一次进行两次跳跃,而草龟则一次进行跳跃。
当野兔到达列表的末尾时,我们知道乌龟已经中途了,因此可以将列表分成两半:到目前为止看到的列表是前半部分,还有待枚举的列表是下半场。
因此,算法如下:
half :: [a] -> ([a], [a])
half h = go h h
where go (_:(_:hs)) (t:ts) = (..., ...)
where (a, b) = go ...
go _ (t:ts) = (..., ...)
go _ [] = (..., ...)
还有...
个部分仍要填写。