Я хочу написать функцию, которая разбивает списки на подсписки в соответствии с тем, какие элементы удовлетворяют заданному свойству 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
. Как мне это назвать ??