common-lisp 定义匿名函数
示例
CommonLisp中的函数是一等值。可以使用创建匿名函数lambda。例如,这是3个参数的函数,然后我们使用调用funcall
CL-USER> (lambda (a b c) (+ a (* b c)))
#<FUNCTION (LAMBDA (A B C)) {10034F484B}>
CL-USER> (defvar *foo* (lambda (a b c) (+ a (* b c))))
*FOO*
CL-USER> (funcall *foo* 1 2 3)
7匿名函数也可以直接使用。CommonLisp为此提供了一种语法。
((lambda (a b c) (+ a (* b c))) ; the lambda expression as the first
; element in a form
1 2 3) ; followed by the arguments匿名函数也可以存储为全局函数:
(let ((a-function (lambda (a b c) (+ a (* b c))))) ; our anonymous function (setf (symbol-function 'some-function) a-function)) ; storing it (some-function 1 2 3) ; calling it with the name
带引号的lambda表达式不是函数
请注意,带引号的lambda表达式不是CommonLisp中的函数。这并不能正常工作:
(funcall '(lambda (x) x)
42)要将带引号的lambda表达式转换为函数,请使用coerce,eval或funcall:
CL-USER > (coerce '(lambda (x) x) 'function) #<anonymous interpreted function 4060000A7C> CL-USER > (eval '(lambda (x) x)) #<anonymous interpreted function 4060000B9C> CL-USER > (compile nil '(lambda (x) x)) #<Function 17 4060000CCC>
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下