我是计划中的新手,我正在尝试编写一个总是找到列表尾部第一个元素的过程。这在递归调用中很重要。
这是我的程序:
(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
可能是什么问题?你能给我一个灵感吗?我对“第二”的定义是错误还是什么?
提前致谢。
答案 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))
。