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/