在typedracket中列出树

时间:2016-11-10 19:48:04

标签: functional-programming lisp racket typed-racket

我正在尝试将整数列表转换为树。 以下是我的函数定义:

(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

我在家学习,不知道在折叠后该做什么。有人可以帮助我吗?>

1 个答案:

答案 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))