Прежде всего, я должен отметить, что я довольно новичок в Схеме, и поэтому следующий вопрос может не иметь особого смысла.
В школе мы определили алгебраические типы данных , которые обычно имеют нулевой конструктор, а также некоторые внутренние / внешние.
В этом конкретном случае я заинтересован в создании BTree
типа бинарного дерева (возможно, сбалансированного, в будущей итерации), и мне хотелось бы что-то вроде this , как Haskell обрабатывает конструкторы , Ранее я видел, как реализовать деревья в Scheme, например, здесь , но это , а не , что я хочу.
Я не хочу просто оборачивать списки. Я просто хочу написать что-то вроде:
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)))))
Кроме того, я приветствую предложения для правильного отступа моего кода Схемы ... (и будьте любезно изменены)