2016-10-13 3 views
1

Я работаю над обращением по порядку к двоичному дереву поиска. Это то, что у меня есть до сих порПоследовательный ход заказа по схеме

(define (head tree) 
    (car tree)) 
(define (left tree) 
    (cadr tree)) 
(define (right tree) 
    (caddr tree)) 

    (define (post-order node) 
    (if (null? node) 
      '() 
      (append (cons (post-order (left node)) 
      (post-order (right node))) 
      (head node)))) 

Я ожидаю, что этот код может вернуть список почтовых отправлений после заказа. Однако он даже не компилируется. Ошибка

mcar: contract violation 
    expected: mpair? 
    given: 5 

Я проверил синтаксис Append и минусы. И я до сих пор не могу понять эту проблему. Кажется, что что-то не так с логикой, а не с синтаксисом.

Можете ли вы указать на это и объяснить это. Спасибо.

ответ

2

С append аргументы являются списками. В вашем коде вы добавляете head в виде точечного значения, и, таким образом, этот список может использовать только последний аргумент в следующем порядке: append. Это исправит это:

+0

Это работает. Спасибо за это четкое объяснение:) –

Смежные вопросы