1

我现在正在准备考试,但我不确定我是否理解listScheme 中的程序。我知道它可以用于创建列表变量,如(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)

(list cdr car)是什么意思?(我知道引用列表中的第一个和其余部分的含义cdrcar含义)

4

1 回答 1

3

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

(foo3 #t (list cdr car))

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

(cdr '(a b c))
=> '(b c)
于 2013-05-01T17:34:41.923 回答