0
run([H|T]) --> num(H),run(T).
run([T]) --> num(T).
num(increase) --> [increase],{write(1),nl}.
num(decrease) --> [decrease],{write(0),nl}.

このパーサーでは、increaseが指定されている場合は1が出力され、decreaseが指定されている場合は0が出力されます。ただし、リストの最後の要素を処理するときに問題が発生します。たとえば、run(A,[increase],[])2つの1を出力します。run(A,[increase,decrease],[])1つと2つの0を出力しますが、これは私が望まないことです。run(A,[increase],[])1をrun(A,[increase,decrease],[])印刷して1,0を印刷するように正しく機能させるにはどうすればよいですか?

4

1 に答える 1

4

この場合、run//1の両方の句が一致します。run//1の2番目の句を次のように変更することを検討してください。

run([]) --> [].

phrase(run(A), [increase])独立して、DCGの特定の拡張方法を想定するのではなく、移植性のためにphrase / 2(like)を使用することを検討してください。

于 2011-06-04T23:38:11.897 に答える