2011-06-04 50 views
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的第二子句:

run([]) --> []. 

独立地,考虑使用的短语/ 2(如phrase(run(A), [increase])),用于便携性,而不是承担DCG中的特定的扩展方法。