Re: [LA-discussions] coder en scheme

[ Thread Index | Date Index | More linuxarverne.org/discussions Archives ]


Le vendredi 17 mai 2013 09:57:55 Kewl Cat a écrit :
> Recherche dans la "grande liste" ?
> Je ne vois pas d'élément (2 1 0 1) dans ton exemple...

mmm faute de frappe sans aucun doute

> 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

mais comment je la fais cette liste ?... 

> (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))))

j'ai lu ça aussi dans la doc, il me semblait bien que ça allait me servir...
En fait pour être précis je peux avoir des doublons sur les valeurs a b c et 
d d'une liste (list a b c d e f) mais dans ce cas les valeurs e et f seront 
 
> 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, 

oui c'est ça

> 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". 

heu ça te gène si je te met à la fin mon bout de code de test ?

> 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...

heu oui j'ai lu ça ici :
http://www.gnu.org/software/guile/manual/html_node/Array-Procedures.html#Array-Procedures
il y a : Scheme Procedure: array-for-each proc src1 src2 …

ma liste de listes:

(define cte
 (list
  (list 6 -1 0 2 2 2)
  (list 4 -1 0 1 2 2)
  (list 0 0 0 1 2 3)
  (list 1 0 0 2 2 3)
  (list 2 0 0 1 2 4)
  (list 3 0 0 2 2 4)
  (list 5 0 0 2 2 5)
  (list 4 0 0 1 2 5)
  (list 6 0 0 2 2 6)
  (list 0 1 0 1 2 6)
  (list 1 1 0 2 2 7)
  (list 2 1 0 1 2 7)
  (list 3 1 0 2 2 8)
  (list 4 1 0 1 2 8)
  (list 5 1 0 2 2 9)
  (list 0 2 0 1 2 9)
  (list 6 1 0 2 2 10)
  (list 2 2 0 1 2 10)
  (list 1 0 0 1 1 2)
  (list 3 1/2 0 2 1 2)
  (list 5 0 0 2 1 3)
  (list 4 0 0 1 1 3)
  (list 6 0 0 1 1 4)
  (list 0 1 0 2 1 4)
  (list 1 0 0 1 1 5)
  (list 2 1 0 2 1 5)
  (list 3 1 1/2 2 1 6)
  (list 4 1 0 1 1 6)
  (list 5 1 0 2 1 7)
  (list 6 1 0 1 1 7)
  (list 0 2 0 2 1 8)
  (list 1 1 0 1 1 8)
  (list 2 2 0 2 1 9)
  (list 4 1 0 1 1 9)
  (list 6 2 0 1 1 10)
  (list 3 2 1/2 2 1 10)
  (list 5 3 0 2 1 11)
  (list 1 2 0 1 1 11)
  (list 0 0  1/2 1 1 1)
  (list 1 0  1/2 2 1 1)
  (list 6 0 -1/2 1 2 1)
  (list 4 0  1/2 2 2 1)
 )
)

et je cherche à récupérer e et f pour a b c d = 4 1 0 1 (il y a deux 
résultats, 1 6 et 2 8.

mais pour 3 1 0 il n'y a qu'une seule valeur possible, on n'a mm pas besoin 
du d.

et pour 6 1 0 on a soit 2 2 10 soit 1 1 7, et selon les cas je dois choisir 
en fonction de d ou de e. Dans tous les cas la valeur finale qui m'intéresse 
est d e f que ce soit l'unique solution ou que j'aie forcé la valeur d ou e.

donc comment tu écris (let ((x (cadddr r)) (y ((cadddddr r)))) pour que ça 
fasse le boulot ?

merci

-- 
Cordialement, Daniel Cartron
« Ne faites pas à autrui ce que vous pouvez faire le jour même. »
Francis Blanche - Mon oursin et moi


--
Liste de discussions de LinuxArverne
http://wiki.linuxarverne.org/listes_de_diffusion


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/