我正在学习考试,但我不确定我是否理解Scheme中的list
程序。我知道它可以用于创建列表变量,如(define x (list 'a 'b 'c))
。但是我在程序创建中看到了它的另一种用法:
1 ]=> (define foo3
(lambda (b lst)
(if b
(car lst)
(cadr lst)
)
)
)
;Value: foo3
1 ]=> (foo3 #f ’(a b))
;Value: b
1 ]=> ((foo3 #t (list cdr car)) ’(a b c))
;Value: (b c)
(列出cdr car)是什么意思? (我知道cdr
和car
在引用第一个和其余部分方面意味着什么)
答案 0 :(得分:3)
在代码中,(list cdr car)
只是一个程序列表。 foo3
将根据传递的参数b
从该列表中选择一个过程。在第二个示例中,此代码段:
(foo3 #t (list cdr car))
...将返回cdr
因为第一个参数是#t
,所以最后我们只评估这个:
(cdr '(a b c))
=> '(b c)