cas*_*cal 4 lisp lambda scheme higher-order-functions mit-scheme
我在查找如何使用Scheme中列表中包含的lambda时遇到了一些麻烦.例如,我有以下代码:
(define abc '((lambda (x) (* x x))))
Run Code Online (Sandbox Code Playgroud)
我想从列表中取出第一个lambda并将其应用于某些数字.这是我到目前为止:
(map (car abc) '(1 2 3))
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
;The object (lambda (x) (* x x)) is not applicable.
Run Code Online (Sandbox Code Playgroud)
但是,当我直接使用lambda尝试同样的事情时,它的工作原理是:
(map (lambda (x) (* x x)) '(1 2 3))
;Value 15: (1 4 9)
Run Code Online (Sandbox Code Playgroud)
有人能帮助我理解我做错了什么吗?
你应该明白这一点
(lambda () 42)
Run Code Online (Sandbox Code Playgroud)
和
'(lambda () 42)
Run Code Online (Sandbox Code Playgroud)
不是一回事.第一个被评估时会返回一个可调用对象,当被调用时返回42,第二个返回时返回一个列表,其中第一个元素是符号lambda
,第二个元素是空列表,第三个元素是数字42.
您的代码定义abc
为包含列表的列表,其中第一个元素是符号lambda
,而不是包含可调用函数的列表.为此,你需要写
(define abc (list (lambda (x) (* x x))))
Run Code Online (Sandbox Code Playgroud)
换句话说,lambda
需要对表单进行求值以提供可调用的函数.
归档时间: |
|
查看次数: |
120 次 |
最近记录: |