Простые базы данных

Программа "Подбор партнера" (рис. 2) демонстрирует использова­ние правил для получения информации в результате поиска по образцу среди совокупности фактов. Эта программа является упрощенным прототипом программы для службы знакомств. Она содержит сведения о 7 мужчинах по параметрам: рост, цвет волос, класс машины. Единственным доменом про­граммы является домен man.


/ * Программа: Подбор партнера */

/* Назначение: Демонстрация конструкции правила. */

domains

man = symbol

predicates

choice(man)

short _ height(man) /* мужчина низкого роста */

medium _ height(man) /* мужчина среднего роста */

tall _ height(man) /* мужчина высокого роста */

blасk _ hаir(mаn) /* мужчина - брюнет */

brown _ hair(man) /*мужчина - шатен */

blond _ hair(man) /* мужчина - блондин */

o1d _ car(man). /* владелец старого автомобиля */

new _ car(man) /* владелец нового автомобиля */

sports _ car(man) /* владелец спортивного автомобиля */

kathy _ choiсе(man)

who _ is _ the _ choiсе

goal

who _ is _ the _ choiсе.

clauses

/* факты */

сhоiсе(bill).

choice(jim).

choice(mark).

сhоiсе(robert).

сhоiсе(willy).

choice(tom).

choice(frank).

short _ height(bill).

short _ height(tom).

medium _ height(bill).

medium _ height(torn).

tall _ height(jim).

tall _ height(robert).

tall _ height(frank).

black _ hair(bill).

black _ hair(willy).

brown _ hair(j1m).

brown _ hair(tom).

blond _ hair(mark).

blond _ hair(robert).

blond _ hair(frank).

new _ car(bill).

new _ car(willy).

new _ car(frank).

old _ car(mark).

old _ car(tom).

sports _ car(jim).

sports _ car(robert).

/* правила */

who_is_the_choice:-

kathy_choice(Choice),

write("Kathy's choice is ".Choice,"."),

nl.

kathy_choice(Choice):-

choice(Choice),

tall_height(Choice),

blond_hair(Choice),

sports_car(Choice).

/***** конец программы *****/

 
 


Рис. 2. Программа "Подбор партнера"

В разделе clauses 7 утверждений предиката choice содержат имена bill, jim, mark, robert, willy, tom и frank. Утверждения с предикатами short_hair, medium_height, tall_height, black_hair, brownhair, blond_hair, new_car, old_car и sports_car также содержат эти мужские имена. Целью программы является отыскание мужчины, соответствующего вкусам некой kathy: высокого роста, блондина, обладателя спортивного автомобиля.

В случае обнаружения мужчины, обладающего перечисленными свой­ствами, программа должна напечатать его имя. Правилом для поиска слу­жит

kathy_choice(Choice):-

choice(Choice),

tail_height(Choice),

blond_hair(Choice),

sports_car(Choice).

Назначение правила заключается в том, чтобы найти среди утверждений choice хотя бы один объект, который одновременно является объектом еще трех атрибутных утверждений: tall _ height, blond _ hair, sports _ car.Вначале данное правило присваивает переменной Choice значение од­ного из объектов утверждения choice. Как вы можете вспомнить из обсуж­дения утверждений likes, Турбо-Пролог просматривает утверждения с нуж­ным предикатом, начиная с первого; следовательно, при первой попытке переменная Choice примет значение bill. Затем правило попытается найти соответствие этого значения одному из объектов утверждений первого из атрибутных предикатов, tall_height. Так как такого соответствия нет, то Тур­бо-Пролог откатывается к следующему утверждению choice и делает еще одну попытку. Теперь значением Choice становится jim. jim удовлетворяет запросу kathy, так как обладает высоким ростом, поэтому Турбо-Пролог пы­тается найти соответствие этого значения утверждениям blond_hair. Ввиду того, что эта попытка оканчивается неуспехом, весь процесс повторяется с третьим утверждением choice. Повторы будут происходить до тех пор, пока не будет найдено значение Choice, удовлетворяющее всем трем подцелям

tall _ height(Choice),

blond _ hair(Choiсе),

sports _ car(Choice).


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



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