Рассмотрим (мета-логический) предикат var_in_vars(Var, Vars)
который принимает переменную Var
и список переменных Vars
и преуспевает, если Var
происходит в Vars
. Поэтому нам не нужно гарантировать, что Var
является переменной, или что Vars
- это список переменных.Переменная появление в списке переменных
Что является самым компактным и каноническим способом выразить это в ISO Prolog? Вот overview of the built-ins в ISO/IEC 13211-1: 1995, включая Cor.2: 2012.
?- var_in_vars(V, [U,V,W]).
true.
?- var_in_vars(V, [X,Y,Z]).
false.
Очень приятно, действительно! Но здесь есть одна небольшая проблема (я признаю, что она выходит за рамки стандарта): что, если 'V' привязано к некоторому ограничению или просто« замораживать (V, eeek) », var_in_vars (V, [A, B , C]). ' – false
(Для будущих читателей): вторая принята. ['subsumes_term/2'] (http://www.complang.tuwien.ac.at/ulrich/iso-prolog/dtc2#subsumes_term) - это чистый тестовый предикат, без унификаций, где' unify_with_occurs_check/2' фактически объединяет переменная. – false