Предикат not будет успешным, если не может быть доказана истинность данной подцели

Это приводит к предотвращению связывания внутри 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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: