Как вызвать функцию, которая разбивает списки?

Я хочу написать функцию, которая разбивает списки на подсписки в соответствии с тем, какие элементы удовлетворяют заданному свойству p . У меня вопрос, как назвать функцию. Я приведу примеры в Haskell, но та же проблема возникнет в F # или ML.

split :: (a -> Bool) -> [a] -> [[a]]  --- split lists into list of sublists

Подсписки, объединенные, являются исходным списком:

concat (split p xss) == xs

Каждый подсписок удовлетворяет свойству 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

Итак, чтобы быть точным,

all (initial_p_only p) (split p xss)

Если самый первый элемент в исходном списке не удовлетворяет p , разделите сбой.

Эта функция должна вызываться как-нибудь, кроме split . Как мне это назвать ??

5
задан imz -- Ivan Zakharyaschev 2 April 2011 в 00:15
поделиться