考虑一个(元逻辑)谓词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/