2016-03-30 15 views
1

"Ön sipariş" biçiminde ağaç düğümleri değerlerinin listesini döndüren basit bir kod yazmaya çalışıyorum. Aşağıdaki bunun nedenŞema - İkili ağaç yineleme yineleme ekleri() hiçbir şey yerine boş bir Düğüm olarak

(define pre-iter (lambda (tree) 
(if (not (pair? tree)) 
    (list tree) 
    (append (list (car tree)) (pre-iter (cadr tree)) (pre-iter (caddr tree))) 
))) 

ben bulamıyorum: Yardımlarınız için

(iter-tree (quote (F (B A (D C E)) (G() (I H())))) pre-iter): expected '(F B A D C E G I H), got '(F B A D C E G() I H()) 

ederiz.

cevap

0

Alt ağaç boş olduğunda ek bir durumla uğraşmanız yeterli. Bu deneyin:

(define pre-iter 
    (lambda (tree) 
    (cond ((null? tree) '()) 
      ((not (pair? tree)) (list tree)) 
      (else 
      (append (list (car tree)) 
        (pre-iter (cadr tree)) 
        (pre-iter (caddr tree))))))) 

Çalışıyor istendiği gibi:

(pre-iter '(F (B A (D C E)) (G() (I H())))) 
=> '(F B A D C E G I H) 
+0

Teşekkür Oscar, listelerden parantezleri kaldırır hangi "düzleştirmek" operatörü kullanılarak sona erdi – Tamarcuse