0

私はプログラミング言語の本を読んでいて、次のScheme関数が何をするのかを説明するように求めています(わからない、誰かが説明するのを手伝ってもらえますか):

(define (x lis)
  (cond ((null? lis) 0) 
        ((not (list? (car lis))) 
         (cond 
          ((eq? (car lis) #f) (x (cdr lis))) 
          (else (+ 1 (x (cdr lis)))))) 
        (else (+ (x (car lis)) (x (cdr lis))))))
4

1 に答える 1

6

を無視して、ネストされたリスト構造のリーフノードの数をカウントし#fます。再帰的な手順を使用します。

  • 入力が空のリストの場合、これは0を返す基本ケースです。
  • car入力がリストではない ペアの場合:
    • の場合、car#f繰り返してそれcdrを返します。
    • それ以外の場合は、を1としてカウントし、それをcarで繰り返した結果に追加しcdrます。
  • car最後に、との両方を繰り返し、cdrそれらを足し合わせます。
于 2012-12-02T09:52:51.467 に答える