Союз-пересечение множеств-набор для бинарного дерева реализация комплектов


Из SICP:

Упражнения 2.65

Использовать результаты упражнения 2.63 и 2.64 дать (Н) реализаций Союза и перекресток-набор для наборы выполнены как (сбалансированный) бинарные деревья.41

Я написал следующий ответ:

(define (union-set a b)
  (define (rec set1 set2)
    (cond ((null? set1) set2)
          ((null? set2) set1)
          ((= (car set1) (car set2)) (cons (car set1) (union-set (cdr set1) (cdr set2))))
          ((> (car set1) (car set2)) (cons (car set1) (union-set (cdr set1) set2)))
          (else (cons (car set2) (rec set1 (cdr set2))))))
  (let ((ls-result (rec (tree->list a) (tree->list b))))
    (partial-tree ls-result (length ls-result))))

(define (intersection-set a b)
  (define (rec set1 set2)
    (cond ((or (null? set1) (null? set2)) '())
          ((= (car set1) (car set2)) (cons (car set1) (rec (cdr set1) (cdr set2))))
          ((> (car set1) (car set2)) (rec set1 (cdr set2)))
          ((> (car set2) (car set1)) (rec (cdr set1) set2))))
  (let ((ls-result (rec (tree->list a) (tree->list b))))
    (partial-tree ls-result (length ls-result))))

Это ответ ОК? Могло ли быть лучше?



1266
2
задан 21 апреля 2011 в 07:04 Источник Поделиться
Комментарии