Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания по ИИС.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
3.88 Mб
Скачать

Контрольные задания:

    1. Предположим, что средний налогоплательщик в США это женатый американский гражданин с двумя детьми, который зарабатывает ни меньше, чем 500 $ в месяц и не больше, чем 2 000 $ в месяц. Задайте предикат special_taxpayer, дающий цель special_taxpayer(fred), которая выполняется, если fred не является средним налогоплательщиком из-за не выполнения только одного условия. Используйте отсечение для исключения отката.

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

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

tom versus bill

marjory versus annette

Используйте отсечение для гарантии того, например, что

tom versus bill

и

bill versus tom

не будут отражены вместе.

Контрольные вопросы:

  1. Что означает метод называемый откатом?

  2. Сформулируйте правила отката.

  3. Для чего необходим предикат fail?

  4. Что представляет собой точка отката?

  5. Опишите принципы отката.

  6. Когда выполняется предикат not?

  7. Опишите правильные способ обработки несвязанных переменных в пределах подцели not?

  8. К чему приведет неправильное использование предиката not?

Лабораторная работа № 11.

РЕКУРСИЯ.

Цель работы: изучение возможностей представления и обработки данных в программах на языке Пролог с использованием рекурсии.

Используемое программное обеспечение:Visual Prolog 5.2.

Теоретические сведения

Рекурсивная процедура - это процедура, вызывающая сама себя до тех пор, пока не будет соблюдено некоторое условие, которое остановит рекурсию. Такое условие называют граничным. Рекурсивное правило всегда состоит, по крайней мере, из двух частей, одна из которых является нерекурсивной. Она и определяет граничное условие. Вторая – рекурсивная часть включает в себя базис и шаг рекурсии.

Базис рекурсии - это предложение, определяющее некую начальную ситуацию или ситуацию в момент прекращения. Как правило, в этом предложении записывается некий простейший случай, при котором ответ получается сразу даже без использования рекурсии. Так, в процедуре, описывающей предикат предок, базисом рекурсии является первое правило, в котором определено, что бли­жайшими предками человека являются его родители. Это предложе­ние часто содержит условие, при выполнении которого происходит выход из рекурсии или отсечение.

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

<имя определяемого предиката>:-

[<подцели>],

[<условие выхода из рекурсии>],

[<подцели>],

<имя определяемого предиката>,

[<подцели>].

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

Рекурсия обычно применяется при обработке списков, строк (например, для поиска и замены подстроки), при вычислениях (например, вычисление сумм, факториала) и в ряде других случаев.