НОВОСТИ   БИБЛИОТЕКА   ЮМОР   КАРТА САЙТА   ССЫЛКИ   О САЙТЕ  




предыдущая главасодержаниеследующая глава

К главе 12

Задача 12.1

Было предложено внести ряд изменений в основные функции манипулирования блоками, которые позволили бы системе записывать историю ее поведения в форме как можно более сильно вложенных s-выражений. Имея в виду заданный пример "истории" действий системы, напишите функции DID (СДЕЛАНО), HOW (КАК), WHY (ПОЧЕМУ) и WHEN (КОГДА), которые работали бы, как предполагается ниже:

Функция DID имеет один аргумент, который выглядит как применение некоторой функции в мире кубиков. Она возвращает Т, если ее аргумент присутствует в исторической записи. Так, выполнение (DID '(ИЗБАВИТЬСЯ А)) возвращает T, a (DID '(ИЗБАВИТЬСЯ В)) возвращает NIL.

Функция HOW также ищет свой аргумент в исторической записи, и если он найден, то возвращаются, если они есть, подцели. Так, (HOW '(ИЗБАВИТЬСЯ А)) должно возвратить

((ПОМЕСТИТЬ- В (3 5 0))), a (HOW '(ПОМЕСТИТЬ-В (3 5 0))) должно возвратить ((ВЗЯТЬ А) (ПЕРЕМЕСТИТЬ-ОБЪЕКТ (3 5 2)) (ОТПУСТИТЬ А)). Если соответствия не обнаружено, то должен возвращаться NIL, а если нет никаких подцелей, как в случае (HOW '(ВЗЯТЬ А)), то возвращается атом "?".

Подобным образом функция WHY имеет один аргумент, ищет его в исторической записи и возвращает соответствующую сверх цель. Так, (WHY '(ИЗБАВИТЬСЯ А)) должно возвратить

(ОCBOБОДИТЬ-ПОВЕРХНОСТЬ В). Особые случаи обрабатываются так же, как в случае функции HOW.

Функция WHEN (КОГДА) должна возвращать цель верхнего уровня в истории, если аргумент функции найден. Так, (WHEN '(ИЗБАВИТЬСЯ А)) возвращает (ПОМЕСТИТЬ-В В С). Если аргумент не обнаруживается, то возвращается NIL.

Задача 12.2

Чтобы реализовать свойство хранения истории, необходимо модифицировать все оперирующие с блоками функции, подцели которых представляют какой-то интерес, так, чтобы возвращалось некоторое значение, отражающее историю данной подцели. Для функций PUT-AT (ПОМЕСТИТЬ-В) и UNGRASP (ОТПУСТИТЬ) это легко сделать, поскольку возвращаемые ими значения никак иначе не используются. Значение, возвращаемое функцией MAKE-SPACE (ОСВОБОДИТЬ-МЕСТО), уже несет координаты обнаруженного положения. Необходимость возвращать более одного значения - часто возникающая проблема.

Измените исходные функции MAKE-SPACE и PUT-ON (ПОСТА ВИТЬ-HA) таким образом, чтобы требуемая коммуникация между ними упаковывалась в одно значение функцией MAKE-SPACE и распаковывалась функцией PUT-ON.

Задача 12.3

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

Часть 1. Напишите функцию, которая в качестве аргумента имеет одно s-выражение, а возвращает список всех атомов в этом выражении, которые появляются в позиции функции.

Часть 2. Измените функцию, написанную в части 1, так, чтобы возвращались только функции из системы для мира кубиков. Эта новая функция дает возможность строящейся программе понимания программ сказать, что данная функция может воспользоваться функцией, содержащейся в возвращаемом списке. Работая над определением функции CLEAR-ТОР (ОСВОБОДИТЬ-ПОВЕРХНОСТЬ), она, следовательно, должна возвратить (GET-RID-OF) (ИЗБАВИТЬСЯ).

Часть 3. Было бы хорошо, если бы система понимания программ делала специальную отметку об подпроцедурах, которые появляются в циклах. Измените функцию, написанную в части 2, так, чтобы возвращался список из двух подсписков. Второй подсписок представляет собой список всех функций системы для мира кубиков, расположенных в области действия функций DO. Первый подсписок - это список всех остальных функций системы, действующей в мире кубиков. Если бы функция CLEAR-ТОР (ОСВОБОДИТЬ- ПОВЕРХНОСТЬ) была записана с помощью DO, а не с помощью функции GO и метки, то эта новая функция возвратила бы (( )

(ИЗБАВИТЬСЯ)) и система понимания правильно указала бы, что функция CLEAR-TOP работает путем циклического применения функции GET-RID-OF. Распространение этого свойства на случай GO и соответствующих меток, очевидно, является намного более трудной задачей, поскольку трудно решить вопрос о том, что следует включать в такие циклы. Это согласуется с тем фактом, что программы, построенные в соответствии с правилами структурного программирования, легко читаются. Структурное программирование запрещает использование циклов с GO, допустимы только циклы содержащие DO.

Часть 4. Теперь измените функцию, написанную в части 2, так, чтобы снова возвращались два подсписка, причем первый из них должен быть списком тех функций системы для мира кубиков, которые вызываются всегда, а второй - списком функций, которые вызываются иногда.

Потребуется некоторое обобщение, чтобы попытаться сказать что-нибудь разумное относительно условий, при которых вызываются функции из второго списка. В отношении функций GET-RID- OF (ИЗБАВИТЬСЯ) и CLEAR-TOP (ОСВОБОДЙТЬ-ПОВЕРХНОСТЬ) в ответе должно в какой-то форме сообщаться, что их следует выполнять до тех пор, пока нечто находится на объекте. Извлечь это из внешнего вида программы очень трудно. Например, одна из вещей которую должна знать система понимания программ или о которой она должна догадаться, состоит в том, что переменная POSSIBILITIES (ВОЗМОЖНОСТИ) является списком, хотя этот факт явным образом в программе не отражен. В таких случаях людям, читающим программу, очень помогает комментарий. Комментарий, помещаемый для программ, понимающих программы, должен также оказать им существенную помощь.

Задача 12.4

До сих пор мы не интересовались, каким образом физическая манипулирующая система будет обрабатывать команды MOVETO (ПЕРЕМЕСТИТЬСЯ-К), которые появляются в плане. В системе Винограда команды MOVETO выполнялись в три этапа: сначала рука поднималась на определенную высоту, выше всех предметов, расположенных на столе, затем она перемещалась в точку с координатами X, Y, которые указывались в аргументе к MOVETO, и, наконец, она опускалась вниз до нужной высоты над столом. Обход препятствий достигался, таким образом, благодаря поднятию руки перед перемещением по горизонтали. Если бы эта система манипулирования кубиками была связана с реальной физической рукой робота, снабженной кистью, то потребовался бы какой-то способ передачи требуемых движений устройствам управления двигателями. Тогда системы управления двигателями сделали бы все необходимое для выполнения предписанной им задачи.

Предположим, что в некий момент программист, ответственный за систему Лисп, программист, ответственный за операционную систему вычислительной машины, и конструктор аппаратуры по управлению рукой собрались все вместе, чтобы выработать некоторые конвенции. Несколько новых функций добавляется в систему Лисп. Одна из них - функция SETX (УСТАНОВИТЬ-Х). Выполнение (SETX (положение)) приводит к передаче информации о положении х в регистр устройства управления рукой. Механизмы обратной связи в этом устройстве постоянно управляют положением руки и применяют корректирующие усилия, которые заставляют руку двигаться по направлению к цели, определяемой величиной, находящейся в регистре. Функции SETY и SETZ работают аналогичным образом, помещая свои аргументы в два других регистра устройства управления.

Три другие новые функции, GETDX, GETDY и GETDZ, занимаются коммуникацией, идущей в обратном направлении. Выполнение (GETDX) возвращает разность, измеряемую устройством управления между тем %, в котором регистр предписывает руке находиться, и тем, где она в данный момент находится.

Наконец, функция WAIT (ЖДАТЬ) оценивает свой аргумент снова и снова, пока он не примет значение NIL.

Часть 1. Определите функцию SORT-OF-EQUAL (ПРИМЕРНОРАВНО), значение которой равно NIL, пока абсолютное значение разности между ее первым и вторым аргументами меньше, чем ее третий аргумент.

Часть 2. Определите функцию DO-MOVE (ВЫПОЛНИТЬ-ПЕРЕМЕЩЕНИЕ), так чтобы при выполнении (DO-MOVE (XYZ)) рука поднималась на высоту Z=100, двигалась в точку с указанными координатами х и у, а затем спускалась вниз до высоты z. Примите, что, если по одной координате расстояние до цели меньше 0,1 (в каких-то единицах), можно начинать движение по другой координате.

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

Задача 12.5

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

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

предыдущая главасодержаниеследующая глава








© Злыгостев А.С., 2001-2019
При использовании материалов сайта активная ссылка обязательна:
http://informaticslib.ru/ 'Библиотека по информатике'
Рейтинг@Mail.ru
Поможем с курсовой, контрольной, дипломной
1500+ квалифицированных специалистов готовы вам помочь