Как пройти по дереву в Схеме? - PullRequest
0 голосов
/ 04 апреля 2020

Я новичок в схеме и пытаюсь научиться обходить 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, потому что функция теперь видит пустой список, но я не понимаю, почему список обнуляется, а не продолжает читать вложенный список.

Любые идеи и предложения приветствуются. Я впервые пишу вопрос, поэтому будьте терпеливы со мной:)

1 Ответ

0 голосов
/ 07 апреля 2020
(define (treeTraversal a)
  (if (null? a)
      #!null
      (if (pair? a)
          (cons (treeTraversal (car a))
                (treeTraversal (cdr a)))
          a)))

будет проходить и дублировать ваше дерево.

...