0

我想获得 '(abc) 的第二个值,我不想使用 cadr. 我可以得到正确答案:

(car (cdr '(a b c)))

'b

但是当我构建函数时:

(define test (lambda (list) (car (cdr (list)))))

(test '(a b c))

我收到以下错误:

. . application: not a procedure;
 expected a procedure that can be applied to arguments
  given: '(a b c)
  arguments...: [none]

我真的不知道这个错误是什么意思。

4

1 回答 1

2

您的代码中有不正确的括号,围绕list参数 - 在Scheme中 this:(f)表示“应用f不带参数的函数”,因此在您的代码中 this:(list)试图调用list参数,就好像它是一个函数,而不是引发一个错误。

另请注意,调用list参数不是一个好主意,已经有一个具有该名称的内置过程;这就是为什么我将它重命名为lst. 这应该解决它:

(define test
  (lambda (lst)
    (car (cdr lst))))

(test '(a b c))
=> b
于 2013-10-17T15:21:51.720 回答