从 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)))
我想在 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)))