Я разрабатываю функцию в Haskell, аргументом которой является список пар. Рекурсивно этот список будет разделен до тех пор, пока базовый случай не будет выполнен на основе предопределенного предиката. Обычно для более простых типов данных, например. списки, литералы могут использоваться для сопоставления базового случая, например «[]». Как я могу применить сопоставление образцов с использованием логического предиката?Предикатное приложение по аргументу для соответствия шаблону Haskell
Единственный способ, с помощью которого я пришел, - использовать инструкцию if else. Но, видимо, это привело бы к очевидной проблеме.
Узор
pure_instances [(_,_)] = True
pure_instances ((c1,_):(c2,attrs):xs) = (c1 == c2) && (pure_instances ((c2,attrs):xs))
Метод
build_tree list = if (pure_instances list) then (Leaf get_label list) else (build_tree list)
build_ tree list = ...
Это не для меня ясно, что «очевидно» проблема. Ваш код не имеет смысла ('pure_instances' не полностью применяется в' build_tree'), поэтому трудно понять, в чем проблема, или что вы просите. – crockeea
Ты знаешь о стражах? –
@ReidBatron Спасибо за подсказку, это вдохновило меня! –