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, его всегда можно определить самим.