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 :

(Très)petit casse tête


Sujet :

Lisp

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 24
    Points : 15
    Points
    15
    Par défaut (Très)petit casse tête
    Bonjour,

    Voici mon problème, je voudrais arriver à faire ceci en C LISP :

    1
    2
    3
    4
    5

    Avec une fonction (compte 5) par exemple. Cette fonction imprime donc les chiffre de 1 à 5. Mais la difficulté serait de la faire en récursivité.

    Voila donc mon premier programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (defun compte(nbr &aux compteur)
    (setq compteur 0)
    (cond
    ((equal nbr compteur) 0) 
    ((print (+ compteur 1))(compte (- nbr 1)))
    Cette fonction m'affiche ceci :

    1
    1
    1
    1
    1
    0
    Ce qui est normal car la variable compteur est redéfini à chaque appel de la fonction ...

    Alors ma question est simple comment arriver au résultat indiqué plus haut de manière récursive et non itérative ?

    Je vous remercie de me mettre sur la voie.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Tu n'as pas besoin d'un setq. Il suffit d'avoir une fonction de ce type
    (compte valeur_courante valeur_max), tu affiches la valeur courante, tu l'incrémentes et tu continues par récursivité jusqu'à la valeur max. Il faut simplement faire attention aux bornes de départ et de fin.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    Oui tout à fait, j'ai oublier de le dire mais j'ai déjà fait cela. Je voudrais donc savoir si c'est possible d'arriver au même résultat sans cette astuce. Par exemple j'ai trouvé un autre astuce du type.

    (compte1 valeur)
    (
    (compte2 0 valeur_max)
    )

    Je me sert donc de la fonction compte1 pour cacher la fonction compte2.
    Mais j'aimerais bien trouver la solution sans utiliser cette astuce.

    Est-ce possible ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    J'avoue que je ne comprends pas trop ce que vous recherchez
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 27
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par alcibiade Voir le message
    Bonjour,

    Voici mon problème, je voudrais arriver à faire ceci en C LISP :

    1
    2
    3
    4
    5

    Avec une fonction (compte 5) par exemple. Cette fonction imprime donc les chiffre de 1 à 5. Mais la difficulté serait de la faire en récursivité.

    Voila donc mon premier programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (defun compte(nbr &aux compteur)
    (setq compteur 0)
    (cond
    ((equal nbr compteur) 0) 
    ((print (+ compteur 1))(compte (- nbr 1)))
    Cette fonction m'affiche ceci :

    1
    1
    1
    1
    1
    0
    Ce qui est normal car la variable compteur est redéfini à chaque appel de la fonction ...

    Alors ma question est simple comment arriver au résultat indiqué plus haut de manière récursive et non itérative ?

    Je vous remercie de me mettre sur la voie.
    je m'y met!

Discussions similaires

  1. [PHP 5.2] Petit casse-tête pour les amateurs de tableaux
    Par renaud26 dans le forum Langage
    Réponses: 8
    Dernier message: 07/02/2011, 15h25
  2. Petit casse tête - cp /php
    Par christophev85 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 15/04/2009, 17h25
  3. Réponses: 1
    Dernier message: 10/03/2009, 17h05
  4. Réponses: 20
    Dernier message: 02/02/2008, 22h14
  5. Un petit casse-tête de sessions
    Par FrankOVD dans le forum Langage
    Réponses: 22
    Dernier message: 25/09/2006, 18h18

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