Читаем ГЕДЕЛЬ, ЭШЕР, БАХ: эта бесконечная гирлянда полностью

Давайте посмотрим, что делает система с простым описанием, например, «красный кубик, который поддерживает пирамиду». Это описание использует понятия БЛОК, КРАСНЫЙ, ПИРАМИДА, и РАВНОМЕРНЫЙ, каждое из которых является частью категоризации мира, лежащей в основе системы. Результат может быть представлен в виде блока-схемы, как на рис. 118. Обратите внимание, что это программа предназначена для нахождения предмета, совпадающего с данным описанием. Затем она будет включена в команду сделать нечто с данным предметом или в вопрос об этом предмете. Или же, если это описание будет частью предложения, оно станет частью программы, созданной для представления этого значения для его дальнейшего использования. Заметьте, что этот кусок программы также мог бы быть использован для проверки того, совпадает ли предмет с данным описанием, если бы первая команда НАЙТИ была заранее ограничена поисками нужного нам предмета.

С первого взгляда кажется, что у этой программы — слишком сложная структура, поскольку нам не нравится думать, что значение простой фразы может содержать петли, проверку условий перехода на другую ветвь и другие подобные детали. Чтобы решить эту проблему, нам необходим такой внутренний язык, в котором петли и проверки были бы простейшими элементами и в котором представление процессов было бы так же просто, как и их описание. Программа, представленная на рис. 118, на языке ПЛАННЕР выглядела бы примерно так:

(ЦЕЛЬ (Есть ? кубик X1))

(ЦЕЛЬ (Цвет ? X1 красный))

(ЦЕЛЬ (Равномерный ? X1))

(ЦЕЛЬ (Есть ? пирамида Х2))

(ЦЕЛЬ (Есть ? кубик X1))

(ЦЕЛЬ (? X1 поддерживает ?Х2))

Петли блока-схемы подразумеваются в структуре контроля возврата. Правильность описания оценивается путем следования вниз по списку до тех пор, пока какая-нибудь из целей не окажется невыполнимой; тогда программа автоматически отступает к тому моменту, когда она приняла последнее решение, и пробует другой путь. Решение может быть принято всякий раз, когда вводится новое название предмета или новая ПЕРЕМЕННАЯ (отмеченная префиксом «?»). Переменные используются для сопоставления с образцом. Если они уже обозначают некий предмет, программа сопоставления проверяет, выполнима ли цель для данного предмета. Если нет, то эта программа ищет все возможные предметы, для которых эта цель выполнима, выбирая один предмет и совершая последующие шаги до тех пор, пока ей не придется отступить. В таком случае она начинает работать со следующим подходящим предметом. Таким образом, неявным является даже различие между выбором и проверкой.[80]

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже