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&#39。 run(A,[increase,decrease],[])
打印一个1和两个0,这是我不想要的。如何使其正常工作以便run(A,[increase],[])
打印1和run(A,[increase,decrease],[])
打印1,0?
答案 0 :(得分:4)
在这种情况下,run // 1的两个子句都匹配。考虑将运行// 1的第二个子句更改为:
run([]) --> [].
独立地,考虑使用短语/ 2(如phrase(run(A), [increase])
)来实现可移植性,而不是假设DCG的特定扩展方法。