Сначала мне нужно упомянуть, что я новичок в Scheme, и поэтому следующий вопрос может не иметь особого смысла.
В школе мы определили алгебраические типы данных, которые обычно имеют конструктор с нулевым значением, а также некоторые внутренние / внешние.
В этом конкретном случае меня интересует создание типа двоичного дерева BTree
(возможно, сбалансированного, в будущей итерации), и мне нужно что-то вроде this, как Haskell обрабатывает конструкторы. Ранее я видел, как реализовать деревья в схеме, например здесь, но это не то, что я хочу.
Я не хочу просто делать оболочку вокруг списков. Я просто хочу написать что-то вроде:
nil: -> BTree
node: BTree x T x BTree -> BTree
а затем дайте ему понять, что я имею в виду под:
flattenTree: BTree -> List
а затем я бы определил это как (если определены left
, right
, key
):
(define flattenTree
(lambda (t)
(node (flattenTree (left t))
(key t)
(flattenTree (right t)))))
Кроме того, я приветствую предложения по правильному отступу моего кода схемы ... (и будьте любезно изменены)