Упражнения

1. Напишите запрос к процедуре "читатьпредлож" и введите предло­жение. Что получится, если введенное предложение будет занимать более одной строки? Что произойдет, если в конце предложения не будет стоять точка? Что будет, если на строке располагаются несколько предложении, каждое из которых заканчивается точкой?

2. Напишите новый предикат "вводстроки", который отличается от "читатьпредлож" только тем, что он учитывает все слова, расположенные в одной строке (включая точки) и возвращает их в виде списка.

3. Напишите составной запрос, в котором употребляется процедура "читатьпредлож" для ввода предложения пользователем, а затем исполь­зуется процедура "объект" (см. разд. 5.2) для грамматического разбора предложения.

Напишите запрос, который генерирует все возможные предложения из слов, находящихся в словаре программы.

Воспользуйтесь отладочными средствами, чтобы посмотреть, что происходит при разборе нескольких групп существительного как при наличии, так и при отсутствии прилагательных.

Попытайтесь ввести другие расширения принятой грамматики, такиe,как:

1) переходные и непереходные глаголы,

2) наречия,

3) составные сказуемые.

4. Напишите составной запрос, в котором для ввода пользователем группы существительного употребляется процедура "читатьпредлож", а затем для грамматического разбора применяется процедура "восх_объект" (см. разд. 5.3).

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

При каких условиях левая рекурсия в процедуре восходящего грамматического разбора будет более эффективна, чем правая рекурсия в процедуре нисходящего разбора?

5. Напишите запрос с использованием синтаксиса рассмотренного языка запросов, чтобы выдать лишь имена всех менеджеров отделов. Напишите запрос, позволяющий вывести оклады и имена менеджеров отделов.

6. Напишите новую версию процедуры "читатьпредлож", которая может считывать фразы языка Пролог и преобразовывать их в форму, пригодную для использования процедурой "d_to_m". Существует ли способ оработки операции ":—", позволяющий трактовать ее как самостоятельное слово?

7. Разработайте интерфейс языка запросов с другими уже имеющимися у Вас базами данных Пролога.

8. Добавьте дополнительные средства в язык запросов — другие отношения, помимо отношения "является", и команду "суммировать". Команда "суммировать" должна вычислять итоговую сумму значений одного из числовых полей для всей базы данных.

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие