我是Haskell的新手,有一个工作表问题把我难倒了,这个问题要求我定义一个函数,它接受一个列表,并返回一个元组列表,每个元组都包含原始列表的一个子列表。
我已经尝试了下面的方法。但是,正如预期的那样,在每次递归时,前一个头都会被丢弃。
splits :: [Int] -> [([Int],[Int])]
splits []
= [([],[])]
splits (l:ls)
= ([] ++ [l], ls) : splits ls
这是我得到的结果。
[([1],[2,3,4]),([2],[3,4]),([3],[4]),([4],[]),([],[])]
任何关于如何做到这一点的建议都将不胜感激!
2条答案
按热度按时间kgsdhlau1#
您只需要在递归调用结果的前几项前面加上
l
,因此或者用
first
:gcuhipw92#
这也会移除具有空尾部的项目: