如何在Scheme中的列表中使用lambdas

时间:2016-04-23 08:03:20

标签: lambda scheme lisp higher-order-functions mit-scheme

我在查找如何使用Scheme中列表中包含的lambda时遇到了一些麻烦。例如,我有以下代码:

(define abc '((lambda (x) (* x x))))

我想从列表中取出第一个lambda并将其应用于某些数字。以下是我到目前为止的情况:

(map (car abc) '(1 2 3))

但是,我收到以下错误:

;The object (lambda (x) (* x x)) is not applicable.

但是当我直接使用lambda尝试同样的事情时,它可以工作:

(map (lambda (x) (* x x)) '(1 2 3))
;Value 15: (1 4 9)

有人可以帮我理解我做错了吗?

1 个答案:

答案 0 :(得分:6)

你应该明白

(lambda () 42)

'(lambda () 42)

不是一回事。第一个被评估时会返回一个可调用对象,当被调用时返回42,第二个返回时返回一个列表,其中第一个元素是符号lambda,第二个元素是空列表,第三个元素是42号。

您的代码将abc定义为包含列表的列表,其中第一个元素是符号lambda,而不是包含可调用函数的列表。为此你需要写

(define abc (list (lambda (x) (* x x))))

换句话说,lambda形式需要评估才能为您提供可调用的功能。

相关问题