解析prolog

时间:2011-06-04 23:24:23

标签: parsing prolog dcg

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?

1 个答案:

答案 0 :(得分:4)

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

run([]) --> [].

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