Инструменты пользователя

Инструменты сайта


examination:flp:question17

Побочный эффект псевдофункции

Функции SET, SETQ и SETF отличаются от других рассмотренных функций тем, что помимо того, что они имеют значение, они обладают и побочным эффектом. Эффект функции состоит в образовании связи между символом и его значением, а значением функции является связываемое значение. Символ остается связанным с определенным значением до тех пор, пока это значение не изменят.

В Лиспе все действия возвращают некоторое значение. Значение имеется даже у таких действий, основное предназначение которых заключается в осуществлении побочного эффекта, таких, например, как связывание символа или вывод результатов на печать.

Функции, обладающие побочным эффектом, в Лиспе называют псевдофункциями. Мы будем все же как для функций, так и для псевдофункций использовать понятие функции, если только нет особой надобности подчеркнуть наличие побочного эффекта.

Вызов псевдофункции, например оператор передачи управления (а это тоже вызов), с точки зрения использования его значения может стоять на месте аргумента другой функции. (В языках программирования, основанных на операторном подходе, это обычно невозможно.)

_(list (+ (setq а 3) 4) а) 
> (7 3) 
_а 
> 3                          ; аргументы 
_(list b (setq b 3))         ; вычисляются 
> Error: Unbound atom В      ; слева направо 


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

examination/flp/question17.txt · Последние изменения: 2014/01/15 12:17 (внешнее изменение)