2010-12-03 7 views
-1

Je suis en train de créer un programme qui prend en compte une liste, puis l'inverse. Jusqu'à présent cela fonctionne pour une liste simple, qui ne contient aucune sous-liste, mais quand je la teste pour une liste contient une sous-liste, elle échoue. S'il vous plaît, aidez-moi où est le problème. Voici le code:Scheme Deep reverse function

(define deep-reverse 
    (lambda (L) 
    (cond 
     ((empty? L) '()) 
     (else (append (deep-reverse (rest L)) (list (first L))))))) 

Répondre

0

Tout d'abord, vous utilisez des fonctions non définies Scheme. Je vais travailler les hypothèses suivantes:

vide? est nul?

reste est cdr

premier est la voiture

Votre code fonctionne en prenant le premier élément dans une liste et l'ajouter à une autre liste. Cependant, ce premier élément d'une liste peut être une liste elle-même. Vous devez tester pour voir si l'élément sur lequel vous travaillez est atomique ou une liste. Si c'est une liste, alors vous appelez le reverse-récursif.

Si vous souhaitez voir du code ajouté à ceci, laissez un commentaire.

+0

d'abord, le repos et enpty? sont tous des synonymes communs utilisés lors de l'enseignement de la langue. Beaucoup plus facile à lire et à comprendre. –

1
(define (deeprev L) 
      (if (null? L) '() 
       (if (list? (car L)) 
        (if (chek (car L)) (append (deeprev (cdr L)) (list (reverse (car L))))   
        (append (deeprev (cdr L)) (list (deeprev (car L))))) 
        (append (deeprev (cdr L)) (list (car L))))))