2016-11-10 4 views
0

Je suis en train de convertir une liste d'entiers en arbre. Voici mes définitions de fonctions:liste à l'arbre dans 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 

J'apprends à la maison et ne savent pas quoi faire après foldl. Quelqu'un peut-il m'aider s'il vous plaît?>

Répondre

1

You already have an (: insert : Integer BST -> BST) function.
Pour construire un arbre avec les éléments 1, 2, 3, en utilisant insert vous pouvez écrire

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

C'est une gauche replier (1 2 3) avec insert que la fonction et 'E que la valeur initiale.
Un pli gauche combine le premier élément avec la valeur initiale, puis combine le résultat de cela avec le second élément, et ainsi de suite.

Donc, tout ce que vous avez besoin est

(: bst-from-list : ((Listof Integer) -> BST)) 
(define (bst-from-list ls) 
    (foldl insert 'E ls))