Я новичок в схеме и пытаюсь научиться обходить B-дерево. Я ограничен определенными командами из языка, который делает это еще более сложным.
Вот что у меня есть:
(define tree'("R" 100 999
(
("R" 100 199
(
("L" 120 140 160 180)
)
)
("R" 200 299
(
("L" 220 240 260 280)
)
)
)))
(define (treeTraversal a)
(if(equal? (null? a) #t) 0
(cdr (treeTraversal (cdr a)))))
(treeTraversal tree)
Когда я запускаю его через отладчик, он показывает, что он спускается по списку, сначала обрезая сначала «R», затем 100, затем 999 , но оттуда список обнуляется и показывает "()" в отладчике. После этого я получаю ошибку:
mcdr: нарушение контракта
ожидается: mpair?
учитывая: 0
Я понимаю, что возвращается 0, потому что функция теперь видит пустой список, но я не понимаю, почему список обнуляется, а не продолжает читать вложенный список.
Любые идеи и предложения приветствуются. Я впервые пишу вопрос, поэтому будьте терпеливы со мной:)