编写前缀函数Haskell

时间:2016-01-10 13:11:14

标签: haskell

我是Haskell的新手[我顺便爱上Haskell :)]。 问题是我想编写一个函数myPrefix,它将列表作为输入,并将输入列表的所有前缀组成的列表作为输出。例如:

*Main> prefix [1,2,3]
[[],[1],[1,2],[1,2,3]]

但我想不出办法。 如果有人可以请我朝正确的方向努力,我将负债。

我试图找到相关的帖子,但我找不到,所以我发了一个问题。

提前谢谢!!!

3 个答案:

答案 0 :(得分:2)

库函数inits可以满足您的需求。

否则,请考虑一下:

prefix :: [a] -> [[a]]
prefix [] = baseCase
prefix (x:xs) = doSomethingTo (prefix xs)

您能猜出baseCasedoSomethingTo应该是什么吗?

对于后者:考虑如何转换

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) [[]]
相关问题