Функция lambda является непоименованной пользовательской функцией, которую можно определить в любом месте программы и которой можно тут же воспользоваться. Формат функции:
(lambda <аргументы> <выражения>) — параметр <аргументы> оформляется в виде списка временных переменных, а параметр <выражения> — любая последовательность выражений, оперирующих выбранными аргументами; возвращается результат последнего вычисленного выражения.
Обращение к описанной функции lambda осуществляется с помощью функций apply или mapcar. Поясним на примерах
Выражение (lambda (u v w) (abs (+ u (* 2 v) (* 3 w) ) ) ) является описанием непоименованной функции, вычисляющей абсолютную величину суммы u+2v+3w, где u, v и w — имена временных переменных, выбранных для обозначения аргументов (действие переменных не распространяется за пределы функции lambda). Для использования созданной таким образом одноразовой функции можно в программе вставить, например, текст: (apply '(lambda (u v w) (abs (+ u (* 2 v) (* 3 w)))) (list 4.7 -3.2 10.5)), результатом которого будет 29.8. Вычислитель AutoLISP подставит вместо u, v и w, соответственно, 4.7, -3.2 и 10.5 и вычислит выражение (abs (+ 4.7 (* 2 -3.2) (* 3 10.5))).
Второй пример:
(mapcar '(lambda (q) (+ 1.0 q (* q q) (* q q q))) (list 1.7 2.2 5.8 3.0)) — возвращает (10.503 18.688 235.552 40.0).
Здесь функция, вычисляющая выражение l + q + q^2 + q^3, поочередно применяется к каждому из элементов списка (list 1.7 2.2 5.8 3.0).
Для создания функций пользователя предназначена специальная функция defun:
(defun <имя> ([<аргументы>] [/ <переменные>]) <выражения>) — описывает тело функции, ее аргументы и локальные переменные (т. е. переменные, которые не являются глобальными и имеют действие только в теле самой функции; вне тела функции эти символы не определены); возвращаемым значением функции является результат последнего вычисленного выражения ее тела.
Пример:
(defun oursum (al а2 а3 / s)
(setq s (+ a1 а2))
(- s a3)
) ; конец тела функции
Для того чтобы функцией oursum можно было воспользоваться в текущем рисунке AutoCAD, ее необходимо предварительно сохранить в текстовом файле с расширением lsp (например, ourfunctions.lsp) и затем загрузить этот файл с помощью функции load:
(lambda <аргументы> <выражения>) — параметр <аргументы> оформляется в виде списка временных переменных, а параметр <выражения> — любая последовательность выражений, оперирующих выбранными аргументами; возвращается результат последнего вычисленного выражения.
Обращение к описанной функции lambda осуществляется с помощью функций apply или mapcar. Поясним на примерах
Выражение (lambda (u v w) (abs (+ u (* 2 v) (* 3 w) ) ) ) является описанием непоименованной функции, вычисляющей абсолютную величину суммы u+2v+3w, где u, v и w — имена временных переменных, выбранных для обозначения аргументов (действие переменных не распространяется за пределы функции lambda). Для использования созданной таким образом одноразовой функции можно в программе вставить, например, текст: (apply '(lambda (u v w) (abs (+ u (* 2 v) (* 3 w)))) (list 4.7 -3.2 10.5)), результатом которого будет 29.8. Вычислитель AutoLISP подставит вместо u, v и w, соответственно, 4.7, -3.2 и 10.5 и вычислит выражение (abs (+ 4.7 (* 2 -3.2) (* 3 10.5))).
Второй пример:
(mapcar '(lambda (q) (+ 1.0 q (* q q) (* q q q))) (list 1.7 2.2 5.8 3.0)) — возвращает (10.503 18.688 235.552 40.0).
Здесь функция, вычисляющая выражение l + q + q^2 + q^3, поочередно применяется к каждому из элементов списка (list 1.7 2.2 5.8 3.0).
Для создания функций пользователя предназначена специальная функция defun:
(defun <имя> ([<аргументы>] [/ <переменные>]) <выражения>) — описывает тело функции, ее аргументы и локальные переменные (т. е. переменные, которые не являются глобальными и имеют действие только в теле самой функции; вне тела функции эти символы не определены); возвращаемым значением функции является результат последнего вычисленного выражения ее тела.
Пример:
(defun oursum (al а2 а3 / s)
(setq s (+ a1 а2))
(- s a3)
) ; конец тела функции
Для того чтобы функцией oursum можно было воспользоваться в текущем рисунке AutoCAD, ее необходимо предварительно сохранить в текстовом файле с расширением lsp (например, ourfunctions.lsp) и затем загрузить этот файл с помощью функции load: