1

こんにちは、二分木をリストに転送しようとしていますが、ポストオーダーで交差しています。

(define (postorden arbol)
  (if (null? arbol) 
    ('()) (append (append (postorden (car (cdr arbol))) 
                          (postorden (car (cddr arbol)))) 
                  (list (car arbol)))))

しかし、私はこのエラーが発生します:

cdr: 契約違反が予想されます: ペア? 与えられた: 'null

しかし、たとえばこのツリーでは: '((1 2) ((7 10) ((2 4) null null)) ((6 8) ((10 13) null null) null))

cdr を実行して get: (((7 10) ((2 4) null null)) ((6 8) ((10 13) null nul) null)) そして、この結果に車を作ります: '(( 7 10) ((2 4) null null)) これがペアの場合。だから私は何が間違っているのか理解していません。

前もって感謝します。

4

1 に答える 1

1

式にifは for(if e0 e1 e2)があり、e0、e1、および e2 は式です。プログラムには次のものがあります。

(if e0
    ('() ...)
    e2)

これは、e0 が true の場合に('() ...)が評価されることを意味します。

'()としても知られる空のリストを次に示しnullます。

式はの結果で('() ...)呼び出そうとするため、エラーが発生します。'()...

このエラーを修正してください。他のエラーが表示されなくなることを願っています。表示されない場合は、もう一度お問い合わせください。

于 2014-11-22T20:43:40.863 に答える