Скачиваний:
52
Добавлен:
01.05.2014
Размер:
346.11 Кб
Скачать

11.5. Правила по умолчанию

Логические программы с красными отсечениями фактически состоят из последо­вательности специальных случаев и правила по умолчанию. Например, в программе

11.6. определяющей отношение not, имеется специальный случай для выполненности цели G и факт по умолчанию not G, используемый в остальных случаях. Второе правило программы 11.9, задающей отношение if_then_else, имеет вид

if_then_else(P,Q,R)R.

Оно используется по умолчанию, когда Р не выполнено.

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

Программа 11.10a является упрощенной программой, описывающей выплаты по социальному обеспечению. Отношение пенсия (Человек, Пенсия) определяет, какая Пенсия назначена Человеку. Первое правило программы пенсия утверждает, что инвалиду положена пенсия по инвалидности. Второе правило утверждает, что человеку старше 65 лет положена пенсия по старости, если он в течение достаточно долгого времени делал взносы в соответствующий пенсионный фонд. Это условие кратко обозначено предикатом выплачено. Людям, не выплатившим взнос, все равно назначается дополнительное пособие, если им больше 65 лет.

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

пенсия (X, ничего).

Программа 11.10б является таким вариантом.

Программа 11.10б функционирует правильно, когда речь идет об установлении вида пенсии человеку, например, при решении вопроса пенсия (мактэвиш, Х)?. Однако программа некорректна. Ответ на вопрос пенсия (мактэвиш, ничего)? будет положителен, что вряд ли обрадует человека по фамилии Мактэвиш. Вопрос пенсия (Х,пенсия_по_. старости) имеет единственное решение Х = мактэвиш, что

пенсия (Человек, Пенсияч)

Пенсия - вид, пенсии, назначенной Человеку.

пенсия (X, пенсия по. инвалидности) инвалид(Х).

пенсия (X, пенсия .по старости) старше 65 (X), выплачено(Х).

пенсия(Х,дополнительное пособие) старше__65(Х).

инвалид (мактэвиш).

старше_65(мактэвиш). старше 65(макдональд). старше .65(макдаф).

выплачено(мактэвиш) выплачено (макдональд).

Программа 11.10а. Установление пенсии.

пенсия (Человек, Пенсия)

Пенсия - вид пенсии, назначенной Человеку.

пенсия (Х,пенсия_по инвалидности)  инвалид(Х),!.

пенсия (X. пенсия по старости)  старше..65(X),выплачено(X),!

пенсия(Х,дополнительное пособие) старше_.б5(Х), !. пенсия(Х, ничего).

Программа 11.10б. Установление пенсии.

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

Для решения поставленой задачи лучше ввести новое отношение назначено (X,Y), которое выполнено, если человеку Х назначена пенсия Y Оно задается с помощью двух правил и использует программу 11.l0a, определяющую отношение пенсия:

назначено(Х,Y) пенсия(Х,У).

назначено (X, ничего)  not пенсия(Х,У).

Этой программе присущи все достоинства программы 11.10б и ни один из указанных выше недостатков. Она показывает, что установка человеку пенсии вида «ничего» по умолчанию является действительно новым понятием, которое должно быть представлено надлежащим образом.

Соседние файлы в папке 1-13