如何在prolog中进行DCG中的算术运算

时间:2015-12-11 15:16:28

标签: prolog operators dcg clpfd

verb_phrase(X,P)--> trans_verb(X,X+1,P1), noun_phrase(X+1,P1,P).

对于上面的代码,如果X = 1,我将得到

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

“......”表示不重要的代码。 但我真的想得到2而不是1 + 1。 有人可以告诉我该怎么做吗?

1 个答案:

答案 0 :(得分: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).