Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методическое пособие по ЛБ.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
621 Кб
Скачать
☆

Использование предиката Not

Показать не сексуальные и недорогие машины:

buy_car(_,Color):-

car (_, _, Price) ,

not(colors(Color,sexy)),

Price < 25000.

Предикат 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

Задание Создание программы поиска с предикатами !, not

  1. Запустить среду визуальной разработки Visual Prolog.

  2. Создать программу, определяющую студентов сдавших все экзамены на положительную оценку:

domains% раздел доменов

name, predmet = symbol % домены имя и предмет – символьные

oz = integer% домен оценка – числовое, целое

predicates% раздел предикатов

perevod(name) % задание предиката студент-переводник

us (oz) % задание предиката оценка

pred (predmet) % задание предиката предмет

ucp (name, predmet, oz) % задание предиката успеваемость с указанием имени студента, предмета и оценки полученной по этому предмету

clauses % раздел предложений

p

предикаты перечень студентов-переводников

erevod(pasha).

perevod(lysha).

u s (2).

u

предикаты перечень оценок

s (3).

us (4).

us (5).

p red (matem).

p

предикаты перечень предметов

red (ryc).

pred (ictoria).

u cp (pasha,matem,5).

ucp (pasha, ryc,5).

ucp (pasha, ictoria ,5).

ucp (lysha,matem,3).

ucp (lysha, ryc,2).

ucp (lysha,ictoria ,2).

ucp (olga,matem,2).

ucp (olga, ryc,3).

u

предикаты успеваемости студентов и студентов-переводников

cp (olga,ictoria ,5).

ucp (misha, matem,4).

ucp (misha,ryc ,2).

ucp (misha, ictoria,3).

ucp (dina, matem,4).

ucp (dina, ryc,4).

ucp (dina, ictoria,2).

ucp (masha, matem,4).

ucp (masha, ryc,4).

ucp (masha, ictoria,5).

goal % раздел целей (запросов)

u

Цель: показать студента успевающего по всем предметам

cp (Stud,matem,Matem),Matem<>2,

ucp (Stud,ryc,Ryc),Ryc<>2,

ucp (Stud,ictoria,Ictoria),Ictoria<>2.

  1. Сохранить файл с именем lab4.

  2. Организовать несколько целей с подцелями с конъюнкцией, дизъюнкцией.

  3. Преобразовать программу, добавив прерывание с зеленым отсечением:

stud(Stud):-ucp (Stud,Predmet,Oz),

Oz<>2,

Predmet= matem,

!;

ucp (Stud,Predmet,Oz),

Oz<>2,

Predmet=ryc,

!;

ucp (Stud,Predmet,Oz),

Oz<>2,

Predmet=ictoria.

Организовать цель:

stud(Stud). % показать всех успевающих студентов

  1. Показать всех студентов не переводников успевающих по предмету история (использовать стандартный предикат not). Добавить в программу:

stud(Stud):-ucp (Stud,ictoria,Oz),

Oz=5,

not(perevod(Stud)).

Вопросы для самоконтроля

  1. Опишите механизм прерывания поиска с возвратом.

  2. Опишите красное и зеленое отсечение при организации поиска решения.

  3. Опишите условия делающие поиск решения детерминированным и недетерминированным.

  4. Опишите условия использования предикат fail.

  5. Опишите условия использования предикат !.

  6. Опишите условия использования предикат not.

  7. Опишите условия использования предикат cut.