我是Haskell的新手[我顺便爱上Haskell :)]。 问题是我想编写一个函数myPrefix,它将列表作为输入,并将输入列表的所有前缀组成的列表作为输出。例如:
*Main> prefix [1,2,3]
[[],[1],[1,2],[1,2,3]]
但我想不出办法。 如果有人可以请我朝正确的方向努力,我将负债。
我试图找到相关的帖子,但我找不到,所以我发了一个问题。
提前谢谢!!!
答案 0 :(得分:2)
库函数inits
可以满足您的需求。
否则,请考虑一下:
prefix :: [a] -> [[a]]
prefix [] = baseCase
prefix (x:xs) = doSomethingTo (prefix xs)
您能猜出baseCase
和doSomethingTo
应该是什么吗?
对于后者:考虑如何转换
prefix [2,3] = [[], [2], [2,3]]
到
prefix [1,2,3] = [[], [1], [1,2], [1,2,3]]
这样做的方法是首先将[[], [2], [2,3]]
转换为[[1], [1,2], [1,2,3]]
,然后在其前面添加额外的[]
。
答案 1 :(得分:0)
suffixes, prefices :: [a] -> [[a]]
suffixes [] = [] : []
suffixes lst@(_ : s) = lst : suffixes s
prefices [] = [] : []
prefices lst = lst : prefices (init lst)
答案 2 :(得分:0)
无毒解决方案:
prefixes = foldr (\el acc -> [] : map (el:) acc) [[]]