Я новичок в языке Racket и столкнулся с проблемой.Сейчас я пытаюсь реализовать бинарное дерево поиска, используя cons (список).
Это простой BST, который я пытался сделать:
![enter image description here](https://i.stack.imgur.com/j6p6v.png)
Для этого BST, если я преобразую это в список Racket, это может быть одной из возможностей: '(6, (4, (), ()), (7, (), ())
Чтобы создать этот формат списка, я использовал этот код:
(define x3 (cons 6 (cons (cons 4 (cons null (cons null null)))
(cons 7 (cons null (cons null null)))
И для этого кода результат ниже:
'(6 (4 () ()) 7 () ())
Как видите, это не то, что я хотелВторой дочерний узел 7 () () не находится в скобках, что означает, что он не существует в виде списка. Он действует как отдельные 3 элемента, а не как один список. Поэтому я немного изменил:
(define x2 (cons 6 (cons (cons (cons 4 (cons null (cons null null))) null)
(cons (cons 7 (cons null (cons null null))) null)
)
)
)
И для этого 2-го кода результат будет следующим:
'(6 ((4 () ())) (7 () ()))
И это тоже не то, что я хотел. Первый дочерний узел ((4 () ())) теперь находится внутри и внутри списка. Итак, я сделал последнюю попытку, и код выглядит так:
(define x3 (cons 6 (cons (cons 4 (cons null (cons null null)))
(cons (cons 7 (cons null (cons null null))) null)
)
)
)
И результат выглядит так:
'(6 (4 () ()) (7 () ()))
Теперь это работает! Вопрос в том, почему эти тонкиегс случится?Я вроде понял, что правило отличается между последним элементом списка и другим, когда используются cons, но в конце концов, разве это не один и тот же вид списка?