strange stuff added by saeftl on Thu Sep 18 12:54:46 2014

(define (detree tr)                                                                                              
  (define (inner t)                                                                                              
    (print t)                                                                                                    
    (cond ((Neg? t) (if (not (num-or-var? (second t))) (inner (second t))))                                      
          ((or (Dis? t) (Gen? t))                                                                                
           (let ((tf (map (lambda (x) (num-or-var? x))                                                           
                     (list (second t) (third t)))))                                                              
             (if (any? tf)                                                                                       
               (map (lambda (p) (if (first p) (inner (second p))))                                               
                    (zip tf (cdr t)))))                                                                          
                    )                                                                                            
          (else t)))                                                                                             
  (append tr (inner tr)))