4

像这样的东西:

increment(X, X2 is X + 1).

有什么办法吗?

4

3 回答 3

2
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.
于 2012-11-12T00:14:04.377 回答
1

succ /2 具有您需要的语义以及更多

?- succ(3,X).
X = 4.

?- succ(X,7).
X = 6.

问题的标题似乎需要更笼统的东西,正如@thanosQR 已经指出的那样,语法需要一些改变。

于 2012-11-12T08:19:12.267 回答
0

不,标准的成语是分开做的,例如:

X2 is X + 1, increment(X,X2).
于 2012-11-12T08:59:24.593 回答