1

私は今、試験のために勉強していlistますが、Scheme の手順を理解できたかどうか確信が持てません。のようなリスト変数の作成に使用できることを知っています(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)とはどういう意味ですか? (リストの最初と残りを参照するという点で、私は何cdrを意味するかを知っています)car

4

1 に答える 1

3

コードで(list cdr car)は、 はプロシージャの単なるリストです。foo3は、渡されたパラメータに従って、そのリストから 1 つのプロシージャを選択しますb。2 番目の例では、このスニペット:

(foo3 #t (list cdr car))

cdr...最初のパラメータが だったので返されるので#t、最終的にこれを評価するだけです:

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