2016-11-10 9 views
0

整数のリストをツリーに変換しようとしています。 次は私の関数定義されている:私は自宅から勉強typedracketのツリーへのリスト

(define-struct (Some T) 
    ([value : T])) 

(define-type (Option T) 
    (U 'None (Some T))) 

(define-type BST (U 'E Nd)) 

(define-struct Nd 
    ([root : Integer] 
    [lsub : BST] 
    [rsub : BST])) 

(: bst-from-list ((Listof Integer) -> BST)) 
;; build a BST from a list of integers: use foldl to do s 
(define (bst-from-list x) 
(cond 
    ('() 'E) 
    ((cons hd _) (Nd hd 'E 'E)) 
    (else 
    (foldl 

とfoldlの後に何をすべきか見当がつかない。誰か助けてもらえますか?>

答えて

1

You already have an (: insert : Integer BST -> BST) functionです。
あなたが

(insert 3 (insert 2 (insert 1 'E))) 

書くことができinsert使用して、要素1、2、3でツリーを構築するために、この左は初期値としての機能としてinsert'Eを超える(1 2 3)倍です。
左の折り返しは、最初の要素と初期値を結合し、その結果を2番目の要素と組み合わせるなどです。

だから、あなたが必要とするすべては

(: bst-from-list : ((Listof Integer) -> BST)) 
(define (bst-from-list ls) 
    (foldl insert 'E ls)) 
です
関連する問題