0
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 ?

4

1 回答 1

4

在这种情况下,run//1 的两个子句都匹配。考虑将 run//1 的第二个子句更改为:

run([]) --> [].

独立地,考虑使用短语/2(like phrase(run(A), [increase]))来实现可移植性,而不是为 DCG 假设特定的扩展方法。

于 2011-06-04T23:38:11.897 回答