Определение 15.53. Функция bind 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Определение 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 с.)