Разбор в прологе - PullRequest
       28

Разбор в прологе

0 голосов
/ 05 июня 2011
run([H|T]) --> num(H),run(T).
run([T]) --> num(T).
num(increase) --> [increase],{write(1),nl}.
num(decrease) --> [decrease],{write(0),nl}.

В этом синтаксическом анализаторе, когда задано увеличение, он печатает 1, а при уменьшении, когда он печатает 0. Однако при обработке последнего элемента списка возникает проблема.Например, run(A,[increase],[]) печатает два 1.run(A,[increase,decrease],[]) печатает один 1 и два 0, вещь, которую я не хочу.Как сделать так, чтобы run(A,[increase],[]) печатал 1 и run(A,[increase,decrease],[]) печатал 1,0?

1 Ответ

4 голосов
/ 05 июня 2011

В этом случае оба условия выполнения // 1 совпадают.Подумайте о том, чтобы изменить второе предложение прогона // 1 на:

run([]) --> [].

Независимо от этого рассмотрите возможность использования фразы / 2 (например, phrase(run(A), [increase])) для переносимости вместо использования конкретного метода расширения для DCG.

...