Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité régulier
    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 : 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 !

  2. #2
    Invité de passage
    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 : 4
    Points
    4

    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 :
    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
    Membre Expert
    Inscrit en
    avril 2008
    Messages
    1 037
    Détails du profil
    Informations forums :
    Inscription : avril 2008
    Messages : 1 037
    Points : 2 469
    Points
    2 469

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •