Re: [LA-discussions] coder en scheme |
[ Thread Index | Date Index | More linuxarverne.org/discussions Archives ]
----- Original Message -----
From: Daniel Cartron
Subject: Re: [LA-discussions] coder en scheme
Merci de ta réponse Entre temps et à force de tâtonner j'ai fini par trouver qu'on peut faire des listes de listes et les concatener, et c'est exactement ce qu'il me faut en fait, j'étais parti sur une mauvaise direction, sauf si je n'arrive pas à extraire les infos que je veux de ma liste... Bon je te donne un peu de code pour que tu comprennes, c'est pas compliqué puisque je suis total novice. (...)(define mel (append base_do cta ) )
OK
Tout ça me fait une liste mel qui comprend toutes les listes au mm niveau (pour ce que j'ai pu en voir dans un terminal guile), c'était un besoin niveau 1 et j'aimerais que tu me dises si je fais comme il faut (j'ai plein de sous-listes à combiner, j'avais pas envie de faire des stupides copier coller alors que la concaténation ça existe)
Si tu veux leur faire subir le même traitement, c'est parfaitement logique de les concaténer dans une "grande liste"
maintenant j'ai envie de pouvoir faire une recherche sur la valeur (2 1 0 1) pour récupérer 2 et 7 puisque (list 1 1 0 2 2 7) est la liste qui correspond à ma recherche, puis stocker 2 et 7 dans deux variables.
Recherche dans la "grande liste" ?
Je ne vois pas d'élément (2 1 0 1) dans ton exemple...
Récupérer 2 et 7 ? Où ?
Pour récupérer 2 et 7 dans deux variables à partir de (list 1 1 0 2 2 7) ça n'est pas trop compliqué :
admettons que ta liste "résultat de recherche" s'appelle r
(let (
(x (car(cdr(cdr(cdr r)))))
(y (car(cdr(cdr(cdr(cdr(cdr r))))))
)
)
Ou, si je comprends les raccourcis qu'on peut prendre avec Scheme :
(let ((x (cadddr r)) (y ((cadddddr r))))
mais j'ai aussi besoin de pouvoir trouver (2 1 0 x 2) quelle que soit la valeur de x, ce qui doit me renvoyer 7.
Je n'ai pas encore compris où et comment tu voulais mener ta recherche, mais a priori tu conditionnes ta recherche sur les 1er, 2nd, 3ème et 5ème éléments de ta liste, et tu récupères le (car(cdr(cdr(cdr ta_liste))))
Il suffit de créer une fonction qui détecte l'égalité de ces éléments, et de l'appeler récursivement sur ta "grande liste". Je dis "récursivement" parce qu'avec Lisp j'ai toujours fait comme ça, maintenant peut-être qu'un petit malin a réussi à faire un genre de foreach en Scheme...
=^.^=
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |