prolog - 有没有办法在谓词参数内进行操作?

标签 prolog

像这样的东西:

increment(X, X2 is X + 1).

有什么办法吗?

最佳答案

no.

好吧,除非有 increment/3 的包装谓词这将执行操作,然后调用真正的 increment/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.

关于prolog - 有没有办法在谓词参数内进行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13336713/

相关文章:

prolog - 来自GNU Prolog的不连续谓词警告

prolog - 使用 DCG 在 Prolog 中标记字符串

prolog - 如何在文件中使用 op/3

prolog - 如何检查变量是否在 Prolog 中实例化?

parsing - 关于BNF语法和Prolog的DCG语法的一些疑惑

algorithm - 在 Prolog 中反转列表的一部分

prolog - SWI-Prolog : "false" where?

prolog - Prolog 中\+ 的替代品?

Prolog:创建子列表,给定两个索引

prolog - CLP(FD)、 map 着色