logo
TurboProlog / Документация / TOM_1

Упражнения

1. Программа /*Программа CH04EX04.PRO*/ представляет собой закончен-

ную программу Турбо Пролога, служащую небольшим телефонным справочником.

Так как используются только стандартные предикаты, - секция domains в

этой программе не нужна.

/*Программа CH04EX04.PRO*/

predicates

phone_number(symbol, symbol)

clauses

phone_number("Albert", "ETY-3665").

phone_number("Betty", "555-5233").

phone_number("Carol", "909-1010").

phone_number("Dorothy", "438-8400").

Загрузите и запустите программу /*Программа CH04EX04.PRO*/, а затем,

по очереди, задайте ей следующие цели:

a. phone_number("Carol", Number).

b. phone_number(Who, "438-8400").

c. phone_number("Albert", Number).

d. phone_number(Who, Number).

Теперь измените предложения. Предположим, что Kim и Dorothy имеют

один номер телефона. Добавим этот факт в секцию clauses и введем цель:

phone_number(Who, "438-8400").

На этот запрос вы должны получить два решения:

Who = Kim

Who = Dorothy

2 Solutions

2. Для иллюстрации домена char в программе CH04EX05.PRO описан пре-

дикат isletter (является_буквой), который (в случае задания ему нижепри-

веденных целей) возвращает "No" и "Yes" соответственно:

isletter('%').

isletter('Q').

(В этой программе отношение <= касательно символов означает их алфа-

витное старшинство.)

/*Программа CH04EX05.PRO*/

predicates

isletter(char)

clauses

/*When applied to characters, '<=' means*/

/*"alphabetically precedes or is the same as"*/

isletter(Ch) :- 'a' <=Ch, Ch <= 'z'.

isletter(Ch) :- 'A' <=Ch, Ch <= 'Z'.

Загрузите и запустите программу CH04EX05.PRO и испытайте, по очере-

ди, каждую из этих целей:

a. isletter('x').

b. isletter('2').

c. isletter('hello').

d. isletter(a).

e. isletter(X).

Цели (c) и (d) приведут к сообщению об ошибке типа, а цель (e) вер-

нет сообщение "Unbound Variable" ("Несвязанная Переменная"), т.к. вы не

можете проверить старшинство незаданного объекта по отношению к 'a' или

'z'.