0

スキーム/ラケットで機能します。二分探索木を使用していくつかの関数に取り組んでいます。私はすでにヘルパー関数を次のように定義しています:

;; returns value of node
(define (value node)
    (if (null? node) '()
        (car node)))

;; returns left subtree of node
(define (left node)
    (if (null? node) '()
    (cadr node)))

;; returns right subtree of node
(define (right node)
    (if (null? node) '()
    (caddr node)))

sizeそして、ツリーをパラメーターとして受け取り、指定されたツリー内のnull以外のノードの数を返す関数を作成しようとしています

4

2 に答える 2

2

あなたはとても近くにいるようです。これを試してください(テストされていません):

(define (size tree)
  (if (null? tree) 0
      (+ 1 (size (left tree)) (size (right tree)))))

個人的には、。#fよりもnull値として使用したいです'()。その場合は、最初の行のnot代わりにを使用してください。null?

于 2012-10-05T06:11:02.840 に答える
0

ただの代替品!! 構造体を使用することもできました。これにより、3 つの関数を作成する作業が軽減されます...

(struct node (val left right) #:transparent)
(struct null-tree ())

構造体の組み込み関数、つまり述語とパラメーターアクセサーを使用して上記の関数を直接記述します。

(define (size tree)
  (if (null-tree? tree) 0
    (+ 1 (size (left tree)) (size (right tree)))))
于 2012-11-02T05:21:59.880 に答える