数の木を定義する次の BNF を考えてみましょう。ツリーは、葉、1 つのサブツリーを持つノード 1、または 2 つのサブツリーを持つノード 2 のいずれかであることに注意してください。
tree ::= (’leaf number)
| (’node-1 tree)
| (’node-2 tree tree)
を。これらのツリーで再帰プロシージャのテンプレートを作成します。
b. t に含まれる葉の数を返す手続き (leaf-count t) を定義する
> (leaf-count ’(leaf 5))
1
> (leaf-count ’(node-2 (leaf 25) (leaf 17)))
2
> (leaf-count ’(node-1
(node-2 (leaf 4)
(node-2 (leaf 2) (leaf 3)))))
3
これが私がこれまでに持っているものです:
;define what a leaf, node-1, and node-2 is
(define leaf list)
(define node-1 list)
(define node-2 list)
;procedure to decide if a list is a leaf or a node
(define (leaf? tree) (number? (car tree)))
(define (node? tree) (pair? (car tree)))
(define (leaf-count tree)
(cond ((null? tree) 0)
((number? tree) 0)
((leaf? tree) 1)
(else (+ (leaf-count (car tree))
(leaf-count (cdr tree))))))
問題なく動作するはずですが、次のような単純なテストケースを使用して実行しようとすると
(leaf-count '(leaf 5))
次のエラー メッセージが表示されます。
car: 型ペアの引数が必要です。与えられた葉
このエラー メッセージはどういう意味ですか? リーフをリストとして定義しています。しかし、何らかの理由で、それが表示されず、エラーメッセージが表示されます。