Вы не указали, как будет выглядеть правильный вывод, поэтому отправка неверного кода и просьба угадать, что вы пытаетесь сделать, - это немного!Я, как обычно, предложу свести ваш пример к наименьшему возможному, который воспроизводит вашу проблему.(Это часто приводит вас к решению, прежде чем вы зададите вопрос!)
http://catb.org/esr/faqs/smart-questions.html#code
Но я не уверен, что вы испытываете тот факт, что любой код в скобкахвыполняется во время сопоставления правила, независимо от того, заканчивается правило или нет.Посмотрите на этот простой пример:
>> rule-1: ["a" (print "a matched in rule-1") "b"]
== ["a" (print "a matched in rule-1") "b"]
>> rule-2: ["a" (print "a matched in rule-2") "c"]
== ["a" (print "a matched in rule-2") "c"]
>> parse "ac" [any [rule-1 | rule-2]]
a matched in rule-1
a matched in rule-2
== true
Хотя первое правило не удалось, вы получите обе распечатки!Распечатка из rule-1
произошла из-за того, что код в скобках, выполненный до того, как была обнаружена ошибка.
Ваше «любое» выполняет два правила, которые могут совпадать или не совпадать, причем оба выполняют вставки до выяснения полного соответствиявыглядит как ваша проблема.