Это приводит к предотвращению связывания внутри not несвязанных переменных. При вызове изнутри not подцели со свободными переменными, Visual Prolog возвратит сообщение об ошибке: "Free variables not allowed in not or retractall" (Свободные переменные не разрешены в not или retract). Это происходит вследствие того, что для связывания свободных переменных в подцели, подцель должна унифицироваться с каким-либо другим предложением и выполняться. Правильным способом управления несвязанными переменными подцели внутри not является использование анонимных переменных.
Примеры использования.
Пример 1.
predicates
likes (symbol,symbol)
name (symbol)
clauses
likes (doli,tenis).
likes (elen,tenis).
likes (elen,reading).
name (Name):-likes (Name,A),A<>"reading".
goal
name (Name).
Результат.
Name=doli
Name=elen
2 Solutions
Пример 2.
predicates
likes (symbol,symbol)
name (symbol)
clauses
likes (doli,tenis).
likes (elen,tenis).
likes (elen,reading).
name (Name):-likes (Name,A), A<>"reading", likes (Name1,reading), Name<>Name1.
goal
name (Name).
Результат.
Name=doli
1 Solution
Пример 3.
predicates
likes (symbol,symbol)
name (symbol)
clauses
likes (doli,tenis).
likes (elen,tenis).
likes (elen,reading).
name (Name):-likes (Name,A),not(A="reading").
goal
name (Name).
Результат.
Name=doli
Name=elen
2 Solutions
Пример 4.
predicates
likes (symbol,symbol)
name (symbol)
clauses
likes (doli,tenis).
likes (elen,tenis).
likes (elen,reading).
name (Name):-likes (Name,A),not(A="reading"),likes (Name2,reading),Name<>Name2.
goal
name (Name).
Результат.
Name=doli
1 Solution