方案中的清单程序

时间:2013-05-01 17:27:46

标签: functional-programming scheme

我正在学习考试,但我不确定我是否理解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)是什么意思? (我知道cdrcar在引用第一个和其余部分方面意味着什么)

1 个答案:

答案 0 :(得分:3)

在代码中,(list cdr car)只是一个程序列表。 foo3将根据传递的参数b从该列表中选择一个过程。在第二个示例中,此代码段:

(foo3 #t (list cdr car))

...将返回cdr因为第一个参数是#t,所以最后我们只评估这个:

(cdr '(a b c))
=> '(b c)