我正在尝试将整数列表转换为树。 以下是我的函数定义:
(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
我在家学习,不知道在折叠后该做什么。有人可以帮助我吗?>
答案 0 :(得分:1)
You already have an (: insert : Integer BST -> BST)
function。
要使用insert
构建包含元素1,2,3的树,您可以编写
(insert 3 (insert 2 (insert 1 'E)))
这是(1 2 3)
的左侧折叠,其中insert
为函数,'E
为初始值。
左折叠将第一个元素与初始值组合,然后将其结果与第二个元素组合,依此类推。
所以你需要的只是
(: bst-from-list : ((Listof Integer) -> BST))
(define (bst-from-list ls)
(foldl insert 'E ls))