什么叫分割列表的函数?

Nor*_*sey 5 f# haskell split functional-programming sml

我想编写一个函数,根据满足给定属性的项目将列表拆分为子列表p.我的问题是如何调用该函数.我将在Haskell中给出示例,但同样的问题会出现在F#或ML中.

split :: (a -> Bool) -> [a] -> [[a]]  --- split lists into list of sublists
Run Code Online (Sandbox Code Playgroud)

连接的子列表是原始列表:

concat (split p xss) == xs
Run Code Online (Sandbox Code Playgroud)

每个子列表都满足该initial_p_only p属性,也就是说(A)子列表以满足的元素开头p- 因此不为空,并且(B)没有其他元素满足p:

initial_p_only :: (a -> Bool) -> [a] -> Bool
initial_p_only p [] = False
initial_p_only p (x:xs) = p x && all (not . p) xs
Run Code Online (Sandbox Code Playgroud)

所以准确地说,

all (initial_p_only p) (split p xss)
Run Code Online (Sandbox Code Playgroud)

如果原始列表中的第一个元素不满足p,则拆分失败.

这个函数需要调用以外的东西split. 我该怎么称呼它?

ada*_*mse 12

我相信你所描述的功能breakBefore来自list-grouping包.

Data.List.Grouping:http://hackage.haskell.org/packages/archive/list-grouping/0.1.1/doc/html/Data-List-Grouping.html

ghci> breakBefore even [3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6,2,6]
[[3,1],[4,1,5,9],[2],[6,5,3,5],[8,9,7,9,3],[2,3],[8],[4],[6],[2],[6]]
Run Code Online (Sandbox Code Playgroud)