Repeat :- repeat

start:- nl, O = "y", run.

run:- repeat, write("Введите цифру "), readint(C),

write("Вы ввели ", C),nl,

write("Продолжить? (y/n) "), readln(Otv), nl, conec(Otv).

conec(Otv):- Otv="n", nl.

5.5. Предикат not

Рассмотрим предложение: "Мэри любит всех животных, кроме змей". Как выразить это на Прологе? Одну часть этого утверждения выразить легко: "Мэри любит всякого X, если Х - животное". На Прологе это записывается так:

Like(mary, X):- animal (X).

Во второй части утверждения нужно исключить змей. Это можно сделать, использовав другую формулировку:

eсли Х - змея, то

выражение "Мэри любит X" - не есть истина,
иначе если Х - животное, то

Мэри любит X.

кесли

Записать на Прологе выражение нечто не является истиной ”, можно при помощи специальной цели fail (неуспех), которая всегда терпит неудачу, заставляя потерпеть неудачу и ту цель, которая является ее родителем. Вышеуказанная формулировка на Прологе с использованием fail выглядит так:

like(mary, X):- snake (X),!, fail.

Like(mary, X):-animal(X).

Здесь первое правило позаботится о змеях: если Х - змея, то отсечение (!) предотвратит перебор, исключая таким образом второе правило из рассмотрения, а fail вызовет неуспех. Эти два предложения можно более компактно записать в виде одного:

like(mary, X):- snake(X),!,fail;

Animal(X).

Можно записать утверждение "Мэри любит всех животных, кроме змей" с использованием предиката отрицания. not:

Like(mary, X):- animal(X),not (snake(X)).

Многие версии Пролога поддерживают такую запись. Если же приходится иметь дело с версией, в которой нет предиката not, его всегда можно определить самим.


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



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