这样的事情:
increment(X, X2 is X + 1).
有什么办法吗?
答案 0 :(得分:2)
no.
好吧,除非有increment/3
的包装器谓词执行操作然后调用真实的increment/3
才被视为有效。
edit:假设您要为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.
答案 1 :(得分:1)
succ / 2有你需要的语义和更多
?- succ(3,X).
X = 4.
?- succ(X,7).
X = 6.
问题的标题似乎需要更通用的东西,正如@thanosQR已经指出的那样,语法需要一些改变。
答案 2 :(得分:0)
不,标准习惯用法是单独做的,例如:
X2 is X + 1, increment(X,X2).