Indentation et construction de listes

Fermé
youzirhin Messages postés 1 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 14 avril 2013 - 14 avril 2013 à 07:18
 youzirhin - 15 avril 2013 à 22:42
Bonjour à tous,

Pourriez-vous me débloquer sur cet exercice:
Je dois faire cette liste (loop (cond ((not seau) (return))) (pop seau))en mode construction et avec une indentation correcte, chose sur laquelle je bloque.
Voici ce que j'ai fait mais c'est incorrect et il manque soit une parenthèse ou un nil:

(cons
  (quote loop)
   (cons
    (cons
      (quote cond)
      (cons
        (cons
          (cons (quote not) (cons (quote seau) nil) ) 
        (cons (cons (quote return) nil) ) nil)) nil) 
   (cons
      (cons (quote pop) (cons (quote seau) nil) ) nil) )


Merci pour vos réponses.>

2 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
14 avril 2013 à 09:52
Déjà, l'indentation correcte tu en es loin, il te faudrait une ligne par "cons" et pour chacun de ses paramètres...

Pour ne pas te tromper, je te conseilles de faire la construction récursivement :

En gros tu as :

L = (loop (cond ((not seau) (return))) (pop seau))
L = (loop A B)

A = (cond ((not seau) (return)))
A = (cond C)

B = (pop seau)

C = ((not seau) (return))
C = (D E)

D = (not seau)
E = (return)

Donc tu commences ta construction avec L :

L:
(cons
	(quote loop)
	(cons
		A
		(cons
			B
			nil
		)
	)
)

Puis tu construis A et B.

A:
(cons
	(quote cond)
	(cons
		C
		nil
	)
)

B:
(cons
	(quote pop)
	(cons
		(quote seau)
		nil
	)
)

Et tu remplaces A et B par leur valeur dans L :

L:
(cons
	(quote loop)
	(cons
		(cons
			(quote cond)
			(cons
				C
				nil
			)
		)
		(cons
			(cons
				(quote pop)
				(cons
					(quote seau)
					nil
				)
			)
			nil
		)
	)
)

Tu continues ensuite en construisant C, D et E pour tout remplacer dans L :

(cons
	(quote loop)
	(cons
		(cons
			(quote cond)
			(cons
				(cons
					(cons
						(quote not)
						(cons
							(quote seau)
							nil
						)
					)
					(cons
						(cons
							(quote return)
							nil
						)
						nil
					)
				)
				nil
			)
		)
		(cons
			(cons
				(quote pop)
				(cons
					(quote seau)
					nil
				)
			)
			nil
		)
	)
)

Ce qui donne bien ce que tu veux, sans se prendre la tête...
0
Bonsoir KX,

Je vous remercie pour votre réponse et efficacité. Vous m'avez éclairée sur la construction de cette liste.Avec votre technique, la construction est plus évidente et facile. Merci encore pour votre aide.
0