Problem 6: Tree in Scheme (100 pts)

Let's design a tree data abstraction in scheme! As tree in python, a tree has a label and branches -- a list of trees.

Hint: Recall the function-based tree ADT in python.

(define (tree label branches)
  'YOUR-CODE-HERE
)

(define (label t)
  'YOUR-CODE-HERE
)

(define (branches t)
  'YOUR-CODE-HERE
)

(define (is-leaf t)
  'YOUR-CODE-HERE
)

; A tree for test

(define t1 (tree 1
  (list
    (tree 2
      (list
        (tree 5 nil)
          (tree 6 (list
            (tree 8 nil)))))
    (tree 3 nil)
    (tree 4
      (list
        (tree 7 nil))))))

;;; Tests
; scm> (label t1)
; 1
; scm> (label (car (branches t1)))
; 2
; scm> (is-leaf (car (cdr (branches t1))))
; #t
; scm> (branches (car (cdr (branches t1))))
; ()

Test your implementation with ok:

$ python ok -q tree