有没有办法在谓词参数中进行操作?

时间:2012-11-11 23:44:32

标签: prolog

这样的事情:

increment(X, X2 is X + 1).

有什么办法吗?

3 个答案:

答案 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).