Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Lisp
Lisp Forum d'entraide sur la programmation en langages fonctionnels Lisp et Common Lisp
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/08/2012, 15h10   #1
MilkyMars
Invité régulier
 
Homme
Étudiant
Inscription : août 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2012
Messages : 12
Points : 5
Points : 5
Par défaut Fonction récursive vers itérative.

Bonjour, je fais appel à vous car je n'ai pas grand monde pour m'aider.

Voilà, j'ai une fonction qui donne les caractères compris entre 2 codes caractères qu'on lui donne.

Code :
1
2
3
4
(defun alphabet (deb fin)
  (cond
    ((eq deb fin) "")
    ((string-concat (string (code-char deb)) (alphabet (incf deb) fin))) ) ) )
Petit test :

Code :
1
2
> (alphabet 65 127)
"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
Cette fonction récursive je dois la transformer en fonction itérative mais je ne sais pas trop comment m'y prendre. Voilà ce que j'ai pour l'instant, je sais que ce n'est PAS correct DU TOUT mais je poste quand même :

Code :
1
2
3
4
(defun alphabet (deb fin &aux listchar)
  (cond
    ((eq deb fin) "" (return listchar))
    ((cons (car listchar) (append (string (code-char deb)) (cdr listchar))))
Si quelqu'un peut m'aiguiller, me mettre sur la piste car je bloque.

Merci d'avance !
MilkyMars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2012, 00h07   #2
Leon00
Invité de passage
 
Homme
Étudiant
Inscription : juillet 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant
Secteur : Distribution

Informations forums :
Inscription : juillet 2012
Messages : 5
Points : 4
Points : 4
Je suis dans la même galère que toi !!!!
je peux voir sur ta fonction que tu parcours une liste avec ( cons , car ,cdr .......... ) et ce qui est demandé c pas une liste mais une chaine de caractère !!
j'ai fais une moi et elle me renvois ""

Code :
1
2
3
4
5
6
(defun alphabet (debut fin &aux nulle)
(setq nulle "")
(loop
(cond
((equal debut fin)(return nulle)
((concatenate 'string (string(code-char debut))) (incf debut)))))
voila a celle a qui je suis arrivé
Leon00 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 17h14   #3
jack-ft
Membre Expert
 
Inscription : avril 2008
Messages : 800
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 800
Points : 1 809
Points : 1 809
Citation:
Envoyé par MilkyMars Voir le message
Bonjour, je fais appel à vous car je n'ai pas grand monde pour m'aider.

Voilà, j'ai une fonction qui donne les caractères compris entre 2 codes caractères qu'on lui donne.

Code :
1
2
3
4
(defun alphabet (deb fin)
  (cond
    ((eq deb fin) "")
    ((string-concat (string (code-char deb)) (alphabet (incf deb) fin))) ) ) )
Petit test :

Code :
1
2
> (alphabet 65 127)
"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
Cette fonction récursive je dois la transformer en fonction itérative mais je ne sais pas trop comment m'y prendre. Voilà ce que j'ai pour l'instant, je sais que ce n'est PAS correct DU TOUT mais je poste quand même :

Code :
1
2
3
4
(defun alphabet (deb fin &aux listchar)
  (cond
    ((eq deb fin) "" (return listchar))
    ((cons (car listchar) (append (string (code-char deb)) (cdr listchar))))
Si quelqu'un peut m'aiguiller, me mettre sur la piste car je bloque.

Merci d'avance !
Pour itérer, il faut un itérateur (comme loop ou while) et une affectation (setq), par exemple:

Code :
1
2
3
4
5
6
(defun alphabet (deb fin)
  (let ((listchar ""))
    (while (<= deb fin)
      (setq listchar (string-concat listchar (string (code-char deb))))
      (incf deb))
    listchar))
jack-ft est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h57.


 
 
 
 
Partenaires

Hébergement Web