2017-05-10 1 views
0

Bonjour j'ai pensé et fait un exercice qui est:Scheme obtenir la profondeur d'un élément dans les listes récursives

Définition d'une fonction qui accepte comme premier paramètre une liste qui peut contenir des atomes et des listes récursives et comme second un atome. Les valeurs des atomes ne se répètent pas. La fonction retourne à quelle profondeur est situé l'atome dans la liste ou zéro s'il n'y est pas. Vous devriez utiliser la liste?

Ejemplo 

(profundidad 
‘(c a b (r t) f (1 ((3 4) 5) 
a) 
returns: 
1 
(profundidad 
‘(c a b (r t) f (1 ((3 4) 5) 
k) 
returns: 
0 
(profundidad 
‘(c a b (r t) f (1 ((3 4) 5) 
t) 
returns: 
2 
(profundidad 
‘(c a b (r t) f (1 ((3 4) 5) 
4) 
returns: 
4 

Mon code:

(define (profundidad L c) 
    (cond 
     ((null? L) 0) 
     ((equal? (car L) c) 1) 
     ((list? (car L)) (+ (profundidad (car L) c) 1)) 
    (else(profundidad (cdr L) c)))) 

Il résout des listes bien simples mais comment puis-je retourner des listes internes récursive?

Nous vous remercions de votre temps !.

Répondre

0

Votre problème est que dans le cas où la récursivité sur le car est zero? vous devez faire la même chose que le cas else. Ce que vous devez faire lorsque le premier élément est list?:

(let ((car-result (profundidad (car L) c))) 
    (if (zero? car-result) 
     (profundidad (cdr L) c) 
     (+ 1 car-result))) 
+0

Merci Sylwester vous m'avez fait réaliser quel était le problème merci. – Enoy