IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lisp Discussion :

Fonction récursive vers itérative.


Sujet :

Lisp

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    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 : 11
    Points
    11
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    6
    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 : 6
    Points : 8
    Points
    8
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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))

Discussions similaires

  1. Rendre itérative la fonction récursive
    Par 1abdou1 dans le forum Débuter
    Réponses: 17
    Dernier message: 06/04/2013, 23h57
  2. [MySQL] migration de Fonction récursive PHP/MYSQL vers PHP5 CodeIgniter /mysql
    Par Hasret dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 13/03/2013, 19h32
  3. [XSLT] fonction récursive à N niveaux
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/03/2006, 12h30
  4. Fonction récursive renvoi sur page d'erreur
    Par peck dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 10h08
  5. Problème de fonction récursive avec un TcxDBTreeList
    Par isachat666 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 05/12/2005, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo