Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Определение 15.53. Функция bind
(bind <имя-переменной> <выражение>*) Первый аргумент функции bind — <имя-переменной> — является именем глобальной или локальной переменной, созданной в правиле или функции. Переменная, определенная первым аргументом, будет связана со значением переданного функции выражения. Если заданная переменная еще не определена, она будет создана и связана с соответствующим значением. Помимо пользовательских функций и правил, функцию bind можно использовать в обработчиках сообщений для установки новых значений слотов объекта. Если параметр <выражение> не определен, то выполнение функции bind не оказывает на локальные переменные никакого влияния, а глобальные переменные получают при этом значения по умолчанию. В случае если пользователь задал выражение, то его значение вычисляется и присваивается соответствующей переменной. Если задано несколько выражений, из их значений формируется составное поле, которое потом и будет связано с указанной переменной. Функция bind возвращает значение false при неудачном исходе операции. Во всех остальных случаях функция возвращает присвоенное переменной значение. Ниже приведено несколько примеров использования функции bind (см. также рис. 15.17 и 15.18). Пример 15.18. Использование функции bind и глобальные переменные
(defglobal?*x* =3.4) ?*x* (bind?*х* (+89)} ?*х* (bind?*х* (create$ abсd) ?*х* (bind?*x* d e f) ?*х* (bind?*x*) ? *x*
Рис. 15.17. Использование функции bind и глобальные переменные
Пример 15.19. Использование функции bind в обработчиках сообщений
(defclass A (is-a USER) (role concrete) (slot x) (slot y)) (defmessage- handler A init after () (bind?self: x 3) (bind?self: y 4)) (make-instance a of A) (send [a] print)
Рис. 15.18. Использование функции bind в обработчиках сообщений Замечание Для наглядности при демонстрации работы данных примеров были включены режимы просмотра изменений глобальных переменных и слотов объектов. Функция if реализует стандартный оператор ветвления "если...то...иначе", применяемый практически во всех языках программирования. Эта функция позволяет задавать некоторое условие, в зависимости от выполнения (или невыполнения) которого будут выбраны те или иные действия. Определение 15.54. Функция if (if <выражение> then <действие>* [else <действие>*])
Если условие, заданное с помощью выражения, выполняется (т. е. не является ложным), выполняются действия, определенные в блоке then. В противном случае производятся действия из блока else. В каждом из таких блоков может быть задано любое количество действий. Любой блок может содержать вложенную конструкцию if...then...else. Блок else является необязательным. Значение, возвращаемое функцией if, равно значению последнего вычисленного выражения или выполненного действия. Ниже приведен пример использования функции if. Пример 15.20. Использование функции if (defrule closed-valves (temp high) (valve?v closed) (if (=?v 6) then (printout t "The special valve "?v " is closed!" crlf) (assert (perform special operation)) else (printout t "Valve "?v " is normally closed" crlf))) Замечание Обычно в подобных случаях предпочтительней использование двух правил, как показано в примере 15.21. Пример 15.21. Альтернатива использованию функции if в правилах
(defrule closed-valves-number-6 (temp high) (valve 6 closed) => (printout t "The special valve 6 is closed!" crlf) (assert (perform special operation))) (defrule closed-valves-other-than-6 (temp high) (valve?v&~6 closed) => (printout t "Valve "?v " is normally closed" crlf)) Функция while позволяет выполнять простой цикл с предусловием.
|
|||||
Последнее изменение этой страницы: 2021-03-10; просмотров: 111; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.147.215 (0.004 с.) |