如何在序言中的DCG中进行算术运算
how to do Arithmetic Operations in DCG in prolog
verb_phrase(X,P)--> trans_verb(X,X+1,P1), noun_phrase(X+1,P1,P).
对于上面的代码,如果X=1,我会得到
(...1+1...).
"..."表示不重要的代码。
但我真的很想得到 2 而不是 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).
verb_phrase(X,P)--> trans_verb(X,X+1,P1), noun_phrase(X+1,P1,P).
对于上面的代码,如果X=1,我会得到
(...1+1...).
"..."表示不重要的代码。 但我真的很想得到 2 而不是 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).