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 alphabet clisp


Sujet :

Lisp

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut fonction alphabet clisp
    bonsoir , est ce que quelqu'un peut m'aider en clisp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    alphabet iterative 
    (defun alphabet (x y) 
    (setq a "") 
    (setq x x) 
    (loop  
     (cond 
       ((< y x) (return a)) ) 
       (setq a (string-concat a (string (code-char x)))) 
       (setq x (1+ x))))
    (alphabet 0 256) elle donne le résultat souhaité
    (alphabet 0 char-code-limit) mais avec le code char elle retourne pas un résultat

    ensuite j'aimerais imprimer une chaine de caractère sur un fichier avec la fonction (print-alphabet fichier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <code> <une tabulation> <le caractère "en vrai"> <une tabulation><le caractère en représentation common
    lisp>
    9                    .                               .                            .                          #\tAB
    65                  .                               A                           .                          #\A
    Dans l'attente de vous lire
    merci

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    S’il s’agit de Common Lisp, il vaut mieux utiliser l’abréviation CL, car « clisp », c’est le nom d’une implémentation.

    Je pourrais peut-être aider, mais je ne comprends pas qu’est-ce que c’est que ne marche pas. Utilises-tu emacs avec SLIME? Est-ce qu’il y a des erreurs? Lesquelles?

    Ton code n’est pas fameux.

    Le plus important est qu’en lisp, on déclare TOUJOURS TOUTES les variables. Pour déclarer et initialiser quelques variables locales, on utilise le plus souvent la forme LET:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (let ((var1 val1)
          (var2 val2)
          ...
          (varN valN))
      <le corps>)
    les déclarations étant visibles dans le corps qui consiste d’une ou plusieures expressions, la valeur de la dernière expression étant la valeur du LET. Donc, tu devais écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (defun alphabet (x y)
      (let ((a ""))
        ...))
    Il ne faut pas déclarer x, parce que les arguments formels d’une fonction sont déjà des variables locaux dans le corps de la fonction. C’est-à-dire, tu peux affecter une valeur quelconque a x en dedans de la fonction et cette affectation n’aura aucun effet dehors.

    L’affectation en lisp, c’est l’attribution d’une valeur à une variable déjà déclarée. On se sert le plus souvent de l’operateur universel SETF au lieu de SETQ.

    On n’écrit jamais COND avec une seule branche, il faut utiliser WHEN.

    STRING-CONCAT n’est pas une fonction standard. Je peux deviner ce qu’elle fait, mais ça semble trop inefficace, avec trop de miettes. Il vaut mieux créer d’abord une chaîne avec MAKE-ARRAY et y garder les caractères.

    ensuite j'aimerais imprimer une chaine de carractere sur un fichier avec la fonction (print-alphabet fichier)
    <code> <une tabulation> <le caractère "en vrai"> <une tabulation><le caractère en représentation common
    lisp>
    Je suppose que la fonction FORMAT pouvait t’aider. Seulement, je ne comprends pas comment tu veux imprimer tous les caractères « en vrai », y compris les caractères de contrôle et les signes diacritiques, par exemple, sans parler des points de code sans caractères associés.

    Donc, je propose que tu refasses ton code et expliques tes doutes.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    bonsoir , en fait c'est une fonction qui construit une chaîne de caractère (alphabet 65 97) elle retourne abc
    mais avec (alphabet 0 code-char-limit) elle retourne rien c'est pourquoi j'ai cru que j'ai une erreur alors qu'elle est juste
    sinon la je me bloque sur une fonction qui imprime dans un fichier tous les caractères.
    Voici le résultat que je souhaite avoir dans le fichier :
    <code> <une tabulation> <le caractère "en vrai"> <une tabulation><le caractère en représentation common
    lisp>
    9                    .                               .                            .                          #\tAB
    65                  .                               A                           .                          #\A 
    Voici mon travail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (defun print-alphabet (x y)
    (setq x x)
    (loop 
     (cond
       ((< y x) (return)))
       (princ (write-to-string x)) (princ "                ") (princ(string (code-char x))) (princ "                ")(prin1 (code-char x))
       (setq x (1+ x))
       (terpri)))
     
    (print (print-alphabet 0 90 ) fichier)
    (close fichier)
    en ouvrant le fichier je trouve que le nil , je pense que ceci est du a ma condition d’arrêt (return) qui return le nil et je sais pas comment la modifier
    Dans l'attente de vous lire
    merci

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    > elle retourne rien

    Vraiment ? C’est-à-dire, le REPL écrit
    ? Il n’y même pas d’erreurs ? Je le doute fort. Moi, je ne peux même pas la fonction, parce que tu n’a pas donné la définition de STRING-CONCAT.

    Comment peut-on t’aider si tu n’entres pas dans les détails ?

    > voici le résultat que je souhaite avoir dans le fichier :

    Bon, je vais poser une question plus spécifique. Qu’est-ce que tu attends pour le code 0007 (BELL) ? 0301 (COMBINING ACUTE ACCENT) ? 1F16 (caractère invalide) ?

    D’ailleurs, la première fonction est à refaire, comme je l’ai écrit, et la deuxième aussi, car elle a les mêmes défauts.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Nom : lispdev.png
Affichages : 1413
Taille : 24,6 Ko


    t'as vu elle retourne le resultat ;

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    sinon peut etre que j'ai mal expliqué:
    voila donc l'exercice :
    Nom : lispooooooooooooooo.png
Affichages : 1001
Taille : 65,5 Ko
    (print-alphabet <nom du fichier à écrire>)

    pour concat-string c'est une fonction prédéfini en cl
    je dois pas aussi utiliser le let

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par byjav Voir le message
    > elle retourne rien

    Vraiment ? C’est-à-dire, le REPL écrit
    ? Il n’y même pas d’erreurs ? Je le doute fort. Moi, je ne peux même pas la fonction, parce que tu n’a pas donné la définition de STRING-CONCAT.

    Comment peut-on t’aider si tu n’entres pas dans les détails ?

    > voici le résultat que je souhaite avoir dans le fichier :

    Bon, je vais poser une question plus spécifique. Qu’est-ce que tu attends pour le code 0007 (BELL) ? 0301 (COMBINING ACUTE ACCENT) ? 1F16 (caractère invalide) ?

    D’ailleurs, la première fonction est à refaire, comme je l’ai écrit, et la deuxième aussi, car elle a les mêmes défauts.
    le cond est la condition d'arret de mon loop

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    >t'as vu elle retourne le resultat ;

    Je pense que ça fonctionne plus ou moins comme ça doit fonctionner, et que le probleme le plus sérieux est ce que tu écris le code dans le REPL. D’habitude, on écrit dans un fichier. Essaie ceci : https://shinmera.github.io/portacle/

    > concat-string c'est une fonction prédéfini en cl

    Non.

    > le cond est la condition d'arret de mon loop

    Je le vois, mais ce n’est pas le bon operateur, et j’ai écrit quel operateur il faut employer.

    > je dois pas aussi utiliser le let

    C’est simplement absurde.

    Généralement, c’est dommage que tu ignores ce que j’écris. Demain je suis ici, ensuite je suis offline au moins jusqu’à septembre.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    bonsoir,
    je n'ai pas ignoré ce que tu m'écris
    sinon est ce que tu peux m'aider a faire l'exercice parce que là je me bloque complètement
    merci
    a l'attente de vous lire

  10. #10
    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
    Bonjour,

    Merci de bien vouloir utiliser la balise CODE pour afficher ton code, stp (bouton # dans la barre d'outils).

    Citation Envoyé par shadow123456 Voir le message
    voici mon travail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (defun print-alphabet (x y)
    (setq x x)
    (loop 
     (cond
       ((< y x) (return)))
       (princ (write-to-string x)) (princ "                ") (princ(string (code-char x))) (princ "                ")(prin1 (code-char x))
       (setq x (1+ x))
       (terpri)))
     
    (print (print-alphabet 0 90 ) fichier)
    (close fichier)
    en ouvrant le fichier je trouve que le nil , je pense ue ceçi est du a ma condition d'arret (return) qui return le nil et je sais pas comment la modifier
    Je crois que tu confonds "imprimer" et "retourner".

    Citation Envoyé par shadow123456 Voir le message
    Nom : lispdev.png
Affichages : 1413
Taille : 24,6 Ko

    t'as vu elle retourne le resultat ;
    Ben non, elle imprime le résultat, mais retourne NIL.

    Dans ton instruction (print (print-alphabet 0 90 ) fichier), la fonction print-alphabet imprime les différentes valeurs sur la sortie courante, c'est-à-dire dans le terminal, puis elle retourne NIL.
    Ensuite, la fonction print récupère ses 2 arguments: le NIL retourné par print-alphabet et le contenu de la variable fichier qui doit probablement contenir le nom d'un fichier, puis elle imprime son premier argument NIL dans le fichier passé en second argument, ce qui explique ce que tu trouves dans le fichier.

    Concrètement, pour ton problème, il me paraît difficile de garder la même structure. Il me parait plus simple que la fonction print-alphabet imprime directement dans le fichier passé en paramètre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    (defun print-alphabet (x y fichier)
      (let ((x x))
        (while (<= x y)
           (princ (write-to-string x) fichier)
           (princ "                " fichier)
           (princ(string (code-char x)) fichier)
           (princ "                " fichier)
           (prin1 (code-char x) fichier)
           (terpri fichier)
           (setq x (1+ x)))
        (close fichier)))
     
    (print-alphabet 0 90 fichier)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CLisp] - Fonction Aplatir
    Par Bolboaa dans le forum Lisp
    Réponses: 4
    Dernier message: 24/08/2015, 17h45
  2. [CLisp] - Fonction Position
    Par Bolboaa dans le forum Lisp
    Réponses: 13
    Dernier message: 24/08/2015, 09h49
  3. Fonction Recursive en Clisp
    Par Syriano56 dans le forum Lisp
    Réponses: 9
    Dernier message: 10/04/2015, 22h16
  4. Réponses: 11
    Dernier message: 18/02/2007, 23h20
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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