像这样的东西:
increment(X, X2 is X + 1).
有什么办法吗?
no.
好吧,除非有一个包装谓词来increment/3
执行操作,然后调用 realincrement/3
被认为是有效的。
编辑:假设您要为其编写一个包装器,foo(Arg1, Arg2, Arg3)
以便您可以将表达式作为第二个参数传递。包装器将是:
efoo(Arg1, Expr, Arg3):-
Arg2 is Expr,
foo(Arg1, Arg2, Arg3)
如果您想经常这样做,您可能需要抽象该行为:
eval_call(Predicate, Expressions):-
maplist(evaluate, Expression, Args),
call(Predicate,Args).
evaluate(Expr, Arg):-
Arg is Expr.
有succ /2 具有您需要的语义以及更多
?- succ(3,X).
X = 4.
?- succ(X,7).
X = 6.
问题的标题似乎需要更笼统的东西,正如@thanosQR 已经指出的那样,语法需要一些改变。
不,标准的成语是分开做的,例如:
X2 is X + 1, increment(X,X2).