2015-12-11 31 views
2
verb_phrase(X,P)--> trans_verb(X,X+1,P1), noun_phrase(X+1,P1,P). 

對於上面的代碼,如果X = 1,我會得到怎麼做算術運算DCG在序言

(...1+1...). 

「...」 表示不重要的代碼。 但我真的想得到2而不是1 + 1。 有人能告訴我該怎麼做嗎?

回答

1

如果您對整數進行推理,最簡潔的方法是使用CLP(FD)約束進行算術運算。

您可以在DCG中使用{}/1來嵌入Prolog目標。例如:

:- use_module(library(clpfd)). 

verb_phrase(X0, P)--> { X #= X0 + 1 }, trans_verb(X0, X, P1), noun_phrase(X, P1, P). 
+1

是不是沒有'X#> 0'丟失? – false