创建一个以列表作为参数的过程

时间:2013-04-24 21:50:09

标签: scheme racket

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

这是我的程序:

(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

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

提前致谢。

2 个答案:

答案 0 :(得分:3)

您的代码中有一对额外的,不必要的括号。这解决了它:

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

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

答案 1 :(得分:0)

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