Common lisp 应用从函数列表中选择的函数
我想从函数列表中进行选择。并对参数应用choosen函数Common lisp 应用从函数列表中选择的函数,common-lisp,Common Lisp,我想从函数列表中进行选择。并对参数应用choosen函数 (defvar fn '(#'(lambda (x) (* x x)) #'(lambda (x) (+ x x)))) 上面的代码不起作用有什么问题?fn不是函数列表。由于您引用了该列表,因此不会计算任何函数表达式。所以你只需要一系列的函数LAMBDA X 使用list创建列表并计算所有参数: (defvar fn (list #'(lambda (x) (* x x)) #'(lambda (x) (+ x x)))) 或者使用
(defvar fn '(#'(lambda (x) (* x x)) #'(lambda (x) (+ x x))))
上面的代码不起作用有什么问题?fn不是函数列表。由于您引用了该列表,因此不会计算任何函数表达式。所以你只需要一系列的函数LAMBDA X
使用list创建列表并计算所有参数:
(defvar fn (list #'(lambda (x) (* x x)) #'(lambda (x) (+ x x))))
或者使用反引号和逗号:
(defvar fn `(,#'(lambda (x) (* x x)) ,#'(lambda (x) (+ x x))))
fn不是一个函数列表。由于您引用了该列表,因此不会计算任何函数表达式。所以你只需要一系列的函数LAMBDA X
使用list创建列表并计算所有参数:
(defvar fn (list #'(lambda (x) (* x x)) #'(lambda (x) (+ x x))))
或者使用反引号和逗号:
(defvar fn `(,#'(lambda (x) (* x x)) ,#'(lambda (x) (+ x x))))
如果使用Lisp,则可以交互式地浏览这些数据结构:
CL-USER 50 > '(#'(lambda (x) (* x x)) #'(lambda (x) (+ x x)))
((FUNCTION (LAMBDA (X) (* X X)))
(FUNCTION (LAMBDA (X) (+ X X))))
以上是一份清单。这些元素是什么类型的:
CL-USER 51 > (mapcar #'type-of *)
(CONS CONS)
CL-USER 52 > (mapcar #'eval **)
(#<anonymous interpreted function 40600010FC>
#<anonymous interpreted function 406000112C>)
上面说的元素不是功能,而是cons单元
我们现在评估列表元素:
CL-USER 51 > (mapcar #'type-of *)
(CONS CONS)
CL-USER 52 > (mapcar #'eval **)
(#<anonymous interpreted function 40600010FC>
#<anonymous interpreted function 406000112C>)
如果使用Lisp,则可以交互式地浏览这些数据结构:
CL-USER 50 > '(#'(lambda (x) (* x x)) #'(lambda (x) (+ x x)))
((FUNCTION (LAMBDA (X) (* X X)))
(FUNCTION (LAMBDA (X) (+ X X))))
以上是一份清单。这些元素是什么类型的:
CL-USER 51 > (mapcar #'type-of *)
(CONS CONS)
CL-USER 52 > (mapcar #'eval **)
(#<anonymous interpreted function 40600010FC>
#<anonymous interpreted function 406000112C>)
上面说的元素不是功能,而是cons单元
我们现在评估列表元素:
CL-USER 51 > (mapcar #'type-of *)
(CONS CONS)
CL-USER 52 > (mapcar #'eval **)
(#<anonymous interpreted function 40600010FC>
#<anonymous interpreted function 406000112C>)
lambda x*x'lambda x+x x是一个带引号的表达式。fn是示例中的符号列表
实际上,您希望将lambda计算为函数,以便删除引号并写入:
defvar*fn*列出λx*xλx+x
现在,每个函数对象确实可以用作参数:
应用车辆*fn*列表3
=> 9
也存在。通过阅读HyperSpec,看看你是否能理解它与HyperSpec的区别。你可以这样称呼它:
funcall cadr*fn*3
=> 6
lambda x*x'lambda x+x x是一个带引号的表达式。fn是示例中的符号列表
实际上,您希望将lambda计算为函数,以便删除引号并写入:
defvar*fn*列出λx*xλx+x
现在,每个函数对象确实可以用作参数:
应用车辆*fn*列表3
=> 9
也存在。通过阅读HyperSpec,看看你是否能理解它与HyperSpec的区别。你可以这样称呼它:
funcall cadr*fn*3
=> 6
Barmar,非常感谢,我必须想一想,但它奏效了:-你的回答,对我来说,完全正确,鉴于我目前有限的CL知识:-Barmar,非常感谢,我必须想一想,但它奏效了:-你的回答,对我来说,完全正确,鉴于我目前有限的CL知识:-谢谢。我的神经元现在连接得更好了。他们现在意识到这个名单。。。与“……确实不一样。当您需要编写自评估对象的常量列表时,使用quote是合法的。请参见CLHS。数字和字符串是自计算对象的示例,但计算为数字或字符串的表达式则不是。所以=3车'3和字符串=aaa车'aaa都是真的。谢谢。我的神经元现在连接得更好了。他们现在意识到这个名单。。。与“……确实不一样。当您需要编写自评估对象的常量列表时,使用quote是合法的。请参见CLHS。数字和字符串是自计算对象的示例,但计算为数字或字符串的表达式则不是。So=3 car'3和string=aaa car'aaa都是真的。