Материал: Методическое пособие по Turbo Prolog (старое)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

cells(mersedes).

can_by(X,Y):-human(X), car(Y), likes(X,Y), cells(Y).

Запросы:

1) can_by(lena, X)

X=lada

2) can_by(_,mersedes)

no

3) car(X),cells(X)

X=lada

Пример 5. Программа иллюстрирует различные способы ввода данных.

Predicates vvod_int vvod_ch vvod_s

Программа 7. Ввод данных

Clauses

vvod_int:- readint(N1), readint(N2), N=N1+N2, write(N). vvod_ch:- readchar(N1), readchar(N2), N=N1+N2, write(N). vvod_s:- readln(N1), readln(N2), concat(N1,N2,N), write(N).

Пример 6. Вывести в каждой строке сообщения: Леонард отец Катерины, Карл отец Джейсона, Карл отец Марины.

Domains

Программа 8. База знаний «Семья»

name = symbol Predicates

father(name, name) everybody

clauses

father(leonard, katherine). father(carl, jason). father(carl, marinа). everybody :-

father(X, Y),

write(X, " is ", Y, "s father\n"), fail.

В некоторых случаях может быть необходимым продолжение поиска дополнительных решений, для этого можно использовать встроенный предикат fail. Он не имеет аргументов, всегда считается ложным.

Проверьте работу программы с и без использования предиката fail. Отрицание задается с помощью предиката not.

Пример 7. У нас есть информация о странах-партнерах Европы, имеющих общую границу. Предположим, нас интересуют какие страны-партнеры не

21

имеют общей границы.

Domains

country=symbol

Программа 9. База знаний «Страны Европы»

Predicates

euro_pair(country, country) border(country, country) find_non_border_pair

Clauses

euro_pair(”France”, ”Germany”). euro_pair(”France”, ”Spain”). euro_pair(”France”, ”Italy”). euro_pair(”Germany”, ”Spain”). euro_pair(”Germany”, ”Italy”). euro_pair(”Spain”, ”Italy”). border(”France”, ”Germany”). border(”France”, ”Spain”). border (”France”, ”Italy”). find_non_border_pair:-

Goal

euro_pair(X,Y), not(border(X,Y)), write(X,” – “,Y),fail,nl.

find_non_border_pair

Результатом запроса будет ответ

Germany - Spain. Germany - Italy. Spain - Italy.

Пример 8. Использование составных объектов

Domains

Программа 10. База данных «Коллекция»(Вариант 1)

personal_library=book(title, author, publisher, year) collector, title, author, publisher=symbol year=integer

Predicates

collection(collector, personal_library) Clauses

collection(ivanov, book(”Zolushka”, ”Denis Tarakanov”, ”Dinamo”, 2003)). collection(petrov, book(”Maslenniza”, ”Anna Zimina”, ”Zenit”, 2005)). collection( petrov, book(”Repka”,”Irina Larina”, ”Mir”, 1999)).

/*Демонстрация двухуровневого составного объекта*/

Программа 11. База данных «Коллекция»(Вариант 2)

Domains

personal_library=book(title, author, publiсation) publiсation= publiсation (publisher, year) collector, title, author, publisher =symbol year=integer

Predicates

collection(collector, personal_library) Clauses

collection(ivanov,book(”Zolushka”,”Den Taran”, publiсation (”Dina”, 2003))). collection(petrov,book(”Maslenniza”,”Anna Zima”,publiсation(”Zenit”,2005))).

22

Программа 12. База знаний «Клуб по интересам»

collection( petrov, book(”Repka”,”Irina Larina”,publiсation (”Mir”, 1999))).

/*Демонстрация использования конструкций альтернативных доменов*/

Domains

thing=misc_ thing (whatever); book(author, title); record(artist, album, type)

person, whatever, title, author,artist, album, type =symbol Predicates

owns(person, thing) show_misc_things show_books show_records

Clauses

owns (“Ivanov“, misc_things(“sports car“)). owns (“Petrov“, misc_things(“motor cycle“)). owns (“Smirnov“, misc_things(“piano“)).

owns (“Ivanov”, book (“James A.Mishener“,“Space“)). owns (“Petrov”, book (“Frank Herbert“, “Dune“)).

owns (“Sidorov”, book (“J.R.R. Tolkein“,“Return of the Ring“)). owns (“Ivanov”, record (“Elton John”, “Ice Fair”, “popular“)).

owns (“Petrov”, record(“Michael Jackson“, “We are the World“, “popular“)). owns (“Sidorov”, record (“Madonna“,“Madonna“, “popular“)).

show_misc_things:- owns (X, misc_things(Y)),write( X, “ ”,Y), nl, fail. show_books:- owns (X, book (_,Y)),write( X, “ ”,Y), nl, fail. show_records:- owns (X, record (_,Y,_)),write( X, “ ”,Y), nl, fail.

Задания для самостоятельной работы

1)Дана база данных “Родители и дети”:

родитель(полина, борис), родитель(анатолий, борис), родитель(анатолий, лиза), родитель(борис, катя), родитель(борис, валентина), родитель(полина, евгений).

Сформулировать вопросы на Прологе: Кто является родителем Кати? Есть ли у Лизы ребенок? Кто дети Бориса? Кто чей родитель?

2)Дана база данных “Теремок”:

живет (муха, горюха), живет(комар, пискун), живет(мышка, погрызуха), живет(лягушка, квакушка), живет(заюнок, кривоног), живет( лиса, краса), живет(волк, хватыш), не_живет(медведь, пригнетыш). Указать ответы на следующие вопросы:

?-живет(мышка, погрызуха). ? -живет(волк, X).

23

?-живет(Х, кривоног). ?-не_живет(М,P).

Сформулировать вопросы на Прологе: Живет ли лягушка в теремке? Какое прозвище у лисы? Кто имеет прозвище горюха? Какой следует задать вопрос, чтобы узнать обитателей теремка (без прозвищ)?

3) База данных “Рождение и хобби друзей”: рождение(иванова, лена, 22, июнь, 1971), рождение(петров, сергей, 25, октябрь, 1973), рождение(сидорова, оля, 1, декабрь, 1974), любит(иванова, лена, книги), любит(иванова, лена, танцы), любит(петров, сергей, видео), любит(сидорова, оля, кино).

Сформулировать вопросы на Прологе: Кто родился в 1971 году? Кто родился в октябре? Кто любит книги? Кто любит и книги и танцы?

4)База данных “Колобок”: ушел(колобок,дедушка), ушел(колобок, бабушка), ушел(колобок, заяц), ушел(колобок, волк), ушел(колобок, медведь), не_ушел(колобок, лиса).

Сформулировать вопросы на Прологе: Кто ушел от волка? Кто не ушел от лисы? Кто ушел от волка и от бабушки? Какой следует задать вопрос, чтобы узнать всех персонажей сказки?

5)База данных “Распорядок дня”:

занятие(0, 7, сон), занятие(7, 8, завтрак), занятие(8, 13, школа), занятие(13, 14,обед), занятие(14, 19, свобода), занятие(19, 20, ужин), занятие(20, 23, отдых), занятие(23, 24, сон).

Сформулировать вопросы на Прологе: Когда бывает обед? Что бывает между 14 и 19 часами? Когда бывает сон? (сколько будет решений?)

6) Построить базу данных “Важнейшие события Древнего Мира” на основе установленных фактов, произошедших с 31 по 6 век до нашей эры.

24

Каждый факт приводить в виде событие(Х,Y,Z), где X — название государства, где произошло событие, Y - в каком веке произошло событие, Z — какое произошло событие.

В 31-м веке до нашей эры возникли первые города-государства. Единое государство в Египте образовалось в 30 веке до нашей эры. В 27 веке до нашей эры в Индии появились первые древнейшие города, а в Египте построена пирамида Хеопса. Первые греческие государства появились в 18 веке до нашей эры. В этом же веке в Египте произошло крупное восстание бедняков и рабов. В 15 веке до нашей эры появились первые государства в Китае. Тутмос III правил

вЕгипте в 15 веке до нашей эры. Греция вела троянскую войну в 13 веке до нашей эры. Вторжение борийских племен в Грецию произошло в 11 веке до нашей эры. В 8 веке до нашей эры был основан город Рим. Олимпийские игры стали проводиться в Греции

в8 веке до нашей эры. В 6 веке до нашей эры в Риме была установлена республика, а в Греции произошли реформы Солона. В этом же веке персы взяли Вавилон в Междуречье и завоевали Египет.

1.Составить 3 запроса к этой базе данных.

2.Какие события произошли в период с 15 до 7 в. до н.э.

7) В таблице даны некоторые характеристики движения планет Солнечной системы(числовые величины округлены):

Таблица 6. Характеристики движения планет солнечной системы

Планета

Расстояние до

Период обращения

Средние

Солнца (у.е.)

солнечные сутки

 

 

 

Меркурий

39

88 суток

176

суток

Венера

72

225

суток

117

суток

Земля

100

365

суток

24

часа

Марс

152

687

суток

25 часов

Юпитер

520

12 лет

10 часов

Сатурн

954

29 лет

10 часов

Уран

1920

84

года

24

часа

Нептун

3010

165 лет

22

часа

25

Источник: https://studfile.net/preview/16371536/