从 Scheme 中的列表中提取元素

Extracting element from a list in Scheme

我想在 Scheme

中仅使用 'car' 和 'cdr' 来提取元素“42”
(car (car ((0) (42 #t) (bar))))

但是,我收到一条错误消息:

application: not a procedure; 
expected a procedure that can be applied to arguments 
given: 0 
arguments.....: [none]"

首先,这不是 列表。您缺少引号......因此 Scheme 将表达式解释为过程调用(这就是错误所说明的内容)。这应该可以解决它:

'((0) (42 #t) (bar))

现在,关于您的问题 - 这是提取数字的方法 42:

(car (car (cdr '((0) (42 #t) (bar)))))

从右到左,cdr 跳过列表中的第一个元素,第一个 car 提取 (42 #t) 子列表,最后 car提取号码。顺便说一句,你可以用更短的方式写出以上所有内容,如下所示:

(caadr '((0) (42 #t) (bar)))