このようなもの:
increment(X, X2 is X + 1).
それを行う方法はありますか?
no.
まあ、そのためのラッパー述語がない限りincrement/3
、操作を実行してから、実数を呼び出すことincrement/3
が有効であると見なされます。
foo(Arg1, Arg2, Arg3)
編集:式を2番目の引数として渡すことができるように、のラッパーを作成するとします。ラッパーは次のようになります。
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).