prolog - 变量列表中的变量出现

标签 prolog iso-prolog

考虑一个(元逻辑)谓词var_in_vars(Var, Vars),该谓词采用一个变量Var和一个变量Vars列表,并且如果Var出现在Vars中,则谓词成功。因此,我们不必确保Var是变量,也不必确保Vars是变量列表。

在ISO Prolog中最简洁,规范的表达方式是什么?这是ISO / IEC 13211-1:1995中的overview of the built-ins,包括Cor.2:2012。

?- var_in_vars(V, [U,V,W]).
true.

?- var_in_vars(V, [X,Y,Z]).
false.

最佳答案

一种可能性:

var_in_vars(V, Vs) :- \+ unify_with_occurs_check(V, Vs).


和更短:

var_in_vars(V, Vs) :- \+ subsumes_term(V, Vs).


编辑:将来的读者,请考虑问题的上下文,这是一个特定的紧凑性挑战,涉及在给定情况下ISO谓词的表达能力。

在其他情况下,您可能会从以下定义中受益更多:

var_in_vars(V, Vs) :-
        must_be(list, Vs),
        once((member(X, Vs), V == X)).

关于prolog - 变量列表中的变量出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27389177/

相关文章:

prolog - 为什么 Prolog 等待

generics - 序言中的 "Generic programming"

Prolog 中缀运算符定义

prolog - Prolog 中更安全的类型测试

prolog - prolog 写入错误

prolog - 基本 PROLOG 计数

module - 重新加载导入的模块

list - 获取列表的最小值

prolog - 在 prolog 中编译数据程序时出错

prolog - SICStus Prolog 中的 current_predicate