2

我是计划中的新手,我正在尝试编写一个始终找到列表尾部第一个元素的过程。这在递归调用中很重要。

这是我的程序:

(define second (lambda (x) (car(cdr(x))))

这就是我尝试检查它是否正确运行的方式:

>(define x (list 1 2 3 4))
>(second x)

这是错误:

procedure application: expected procedure, given: (1 2 3 4) (no arguments)

 === context ===
stdin::184: second
/usr/share/racket/collects/racket/private/misc.rkt:85:7

可能是什么问题?你能给我一个灵感吗?我对“第二”的定义是错误的还是什么?

提前致谢。

4

2 回答 2

3

您的代码中有一对额外的、不必要的括号。这修复了它:

(define second (lambda (x) (car (cdr x))))

需要明确的是,这是错误的:(cdr(x)). 正确的形式是:(cdr x)。请记住,每当您需要将函数f应用于参数x时,正确的方法是:(f x).

于 2013-04-24T21:53:44.590 回答
0

Scheme 使用 S 表达式,因此car(x)您应该使用(car x). 在你的情况下,这意味着 (car (cdr x)),不是car(cdr(x))

于 2013-04-24T21:54:23.633 回答