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

2. 6. 3. Сочетание декларативного и процедурного подходов

В предыдущем разделе было показано, что порядок целей и предложений имеет существенное значение. Более того, существуют программы, которые верны в декларативном смысле, но на практике не работают. Такое противоречие между декларативным и процедурным смыслами может вызвать недовольство. Кто-нибудь спросит: "А почему вообще не забыть о декларативном смысле?" Такое пожелание становится особенно сильным, когда рассматриваются предложения типа:

        предок( X, Z) :- предок( X, Z).

Это предложение верно в декларативном смысле, но совершенно бесполезно в качестве рабочей программы.

Причина, по которой не следует забывать о декларативном смысле, кроется в том, что прогресс, достигнутый в технологии программирования, получен на пути продвижения от учета всех процедурных деталей к концентрации внимания на декларативных аспектах, которые обычно легче формулировать и понимать. Сама система, а не программист, должна нести бремя заботы о процедурных деталях. В этом Пролог оказывает некоторую помощь, хотя, как мы видели в данном разделе, помощь лишь частичную: иногда он правильно прорабатывает эти процедурные детали, иногда - нет. Многие придерживаются мнения, что лучше иметь хоть какую-то декларативную семантику, чем никакой (отсутствие декларативной семантики характерно для многих других языков программирования). Практическим следствием такого взгляда является тот факт, что часто довольно легко получить работающую программу, имея программу декларативно корректную. Поэтому практичным следует признать такой подход: сосредоточиться на декларативных аспектах задачи, затем пропустить на машине полученную программу и, если она окажется процедурно неправильной, попытаться изменить порядок следования предложений и целей.

Упражнения

2. 1.    Какие из следующих выражений представляют собой правильные объекты в смысле Пролога? Что это за объекты (атомы, числа, переменные, структуры)?

    (а)        Диана     (b)        диана     (с)        'Диана'     (d)        _диана     (e)        'Диана едет на юг'     (f)        едет( диана, юг)     (g)        45     (h)        5( X, Y)     (i)        +( север, запад)     (j)        три( Черные( Кошки) )

2. 2.    Предложите представление для прямоугольников, квадратов и окружностей в виде структурных объектов Пролога. Используйте подход, аналогичный приведенному на рис. 2.4. Например, прямоугольник можно представить четырьмя точками (а может быть, только тремя точками). Напишите несколько термов конкретных объектов такого типа с использованием предложенного вами представления.

2. 3.    Будут ли следующие операции сопоставления успешными или неуспешными? Если они будут успешными, то какова будет результирующая конкретизация переменных?

    (а)        точка( А, В) = точка( 1, 2)     (b)        точка( А, В) = точка( X, Y, Z)     (c)        плюс( 2, 2) = 4     (d)        +( 2, D)= +( Е, 2)     (е)        треугольник( точка( -1, 0), Р2, Р3) =                  треугольник( Р1, точка( 1, 0), точка( 0, Y)

Результирующая конкретизация определяет семейство треугольников. Как бы Вы описали это семейство?

2. 4    Используя представление отрезков, применявшееся в данной разделе, напишите терм, соответствующий любому отрезку на вертикальной прямой x = 5.

2. 5.    Предположим, что прямоугольник представлен термом прямоугольник( P1, P2, P3, Р4), где Р - вершины прямоугольника, положительно упорядоченные. Определите отношение

        регулярный( R)

которое имеет место, если R - прямоугольник с вертикальными и горизонтальными сторонами.

2. 6.    Рассмотрим следующую программу:

    f( 1, один).     f( s(1), два).     f(    s(s(1)),    три).     f( s(s(s(X))),  N) :-                f(X,   N).

Как пролог-система ответит на следующие вопросы? Там, где возможны несколько ответов, приведите по крайней мере два.

    (a)        ?- f( s( 1), A).     (b)        ?- f( s(s(1)), два).     (c)        ?- f(   s(s(s(s(s(s(1)))))), С).     (d)        ?- f( D, три).

2. 7.    В следующей программе говорится, что два человека являются родственниками, если

    (a)        один является предком другого, или     (b)        у них есть общий предок, или     (c)        у них есть общий потомок.

    родственники( X, Y) :-           предок( X, Y).

    родственники( X, Y) :-           предок( Y, X).

    родственники( X, Y) :-                       % X и Y имеют общего предка           предок( Z, X),           предок( Z, Y).

    родственники( X, Y) :-                       % X и Y имеют общего потомка           предок( X, Z),           предок( Y, Z).

Сможете ли вы сократить эту программу, используя запись с точками с запятой?

2. 8.    Перепишите следующую программу, не пользуясь точками с запятой.

    преобразовать( Число, Слово) :-           Число = 1,  Слово = один;           Число = 2,  Слово = два;           Число = 3,  Слово = три.

2. 9.    Рассмотрите программу на рис. 2.10 и по типу того, как это сделано на рис. 2.10, проследите процесс вычисления пролог-системой вопроса

        ?-  большой( X),   темный( X).

Сравните свое описание шагов вычисления с описанием на рис. 2.10, где вычислялся, по существу, тот же вопрос, но с другой последовательностью целей:

        ?-  темный( X),   большой( X).

В каком из этих двух случаев системе приходится производить большую работу для нахождения ответа?

2. 10.    Что будет, если пролог-системе задать такой вопрос:

        ?-   Х  =  f( X).

Успешным или неуспешным будет здесь сопоставление? По определению унификации в логике, сопоставление должно быть неуспешным, а что будет в соответствии с нашим определением сопоставления из раздела 2.2? Попробуйте объяснить, почему многие реализации Пролога отвечают на вышеприведенный вопрос так:

        X  =   f(f(f(f(f(f(f(f(f(f(f(f(f(f(f( ...

29

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]