2

ノードに整数が含まれるツリーを順番にたどり、すべての数値が正しい場合 (つまり、次の数値が前の数値より大きいか等しい場合) に #t を返します。

これまでの私の試み

 (define (in-order tree number)  
    (cond [(leaf? tree) (>= leafnumber  number)]
          [(cons? leftsubtree) (in-order leftsubtree leftnumber)]
          [(cons? rightsubtree) (in-order rightsubtree rightnumber)]))

ブランチを切り替えると、どういうわけか数値引数が間違っているようです。これらを格納するために別の変数を使用する必要がありますか?

4

1 に答える 1

1

これが私の提案です:

; in-order : tree number -> number or #f
;   if all numbers in the tree are larger than number, then return the maximum number in tree,
;   otherwise 
(define (in-order tree number)
  (cond
    [(leaf? tree)   (if (>= leafnumber  number)
                        leafnumber               ; leafnumber is the largest number in tree
                        #f)]                     ; not all numbers in tree are smaller than number
    [else           (let ([leftnumber (in-order  leftsubtree number)])
                      (let ([rightnumber (in-order rightsubtree leftnumber)])
                        (and leftnumber
                             rightnumber)))]))

(in-order tree -inf.0)
于 2015-09-01T14:57:51.070 に答える