Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Nouveau Membre du Club
    Femme Profil pro Chloé Garcia
    Étudiant
    Inscrit en
    avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Nom : Femme Chloé Garcia
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : avril 2012
    Messages : 59
    Points : 26
    Points
    26

    Par défaut URGENT : problème avec nouvelle version allegro common lisp

    Bonsoir,

    J'ai un soucis qui m'empêche de travailler un projet, qui marchait pourtant très bien avec l'ancienne version d'allegro common lisp.

    Voici ce que je faisais pour commencer mon programme :

    Code :
    1
    2
    3
    4
    5
    6
    (print "Indiquez votre jour de naissance :")
    (setq jour (read))
    (print "Indiquez votre mois de naissance :")
    (setq mois (read))
    (print "Indiquez votre année de naissance :")
    (setq annee (read))
    Les (read) ne fonctionnent pas du tout.
    Je rentre des valeurs et je clique sur entrée mais rien ne se passe.
    Ensuite, en appuyant une fois de plus sur entrée, j'ai une erreur qui s'affiche : NIL n'est pas de type caractère. Le NIl en question correspond à mon second appui sur entrée.

    Sur l'ancienne version, 8.2, tout fonctionnait très bien et le programme marchait dans sa globalité. Ici, avec la dernière version, la deuxième ligne ne marche même pas =(

    Que se passe-t-il ? Du jour au lendemain, tous mes programmes se servant de la fonction read ne fonctionnent plus. Pourquoi ?

    S'il n'y a pas d'explication, existe-t-il d'autres fonctions récupérant une chaine de caractère (nombre ou lettres) ? Je suis un peu paniqué car je ne trouve pas de solutions pour refaire fonctionner mes programmes =/

    Je vous remercie par avance pour votre aide !
    Je cherche partout pour arranger les choses mais je ne trouve toujours rien et ça m'inquiète...!

  2. #2
    Expert Confirmé
    Inscrit en
    avril 2008
    Messages
    1 071
    Détails du profil
    Informations forums :
    Inscription : avril 2008
    Messages : 1 071
    Points : 2 543
    Points
    2 543

    Par défaut

    Bonjour,

    N'ayant pas d'ACL sous la main, je ne peux pas faire de tests. Désolé

    si tu as plusieurs occurrences d'un même groupe de lignes de code (probablement issues de copier/coller (Bouh! Pas bien! )), je te conseille fortement de le factoriser!
    Ceci est d'autant plus valable si ce groupe est "proche" des fonctions système, comme ici, avec les entrées sorties.
    Cela te permettra aussi, entre autres, de simplifier la portabilité (si tu dois passer d'une version à une autre, voire d'une implémentation à une autre).
    Je te conseille donc de transformer ton code en (merci d'utiliser la balise 'CODE' ):
    Code :
    1
    2
    3
    (setq jour (my-read "Indiquez votre jour de naissance :"))
    (setq mois (my-read "Indiquez votre mois de naissance :"))
    (setq annee (my-read "Indiquez votre année de naissance :"))
    Ensuite, il ne te reste plus (sic!) qu'à mettre au point ton reader personnel...
    L'ancienne version était:
    Code :
    1
    2
    3
    (defun my-read (prompt)
        (print prompt)
        (read))
    En ce qui concerne les symptômes que tu décris, il faudrait être plus précis. Que produit l'exécution de:
    Code :
    1
    2
    3
    (setq a (my-read "A:") b (my-read "B:"))
    (print a)
    (print b)
    Peut-être y a-t-il un problème de flush?
    Peut-être est-ce un bug? Normalement, la fonction 'read' devrait bien lire une s-expr dans le flux d'entrée standard.
    ACL a-t-il une fonction 'readline' ou read-line' ?

    J'espère aussi que tu as structuré tes programmes en séparant la partie interactive de la partie traitement:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ;;; Usage: (traitement-date <jour> <mois> <an>)
    ;;; ex: (traitement-date 19 3 1990)
    (defun traitement-date (jour mois an) (blah-blah))
    
    ;;; Usage: (traitement-date-interactif)
    (defun traitement-date-interactif ()
        (traitement-date
            (my-read "Indiquez votre jour de naissance :")
            (my-read "Indiquez votre mois de naissance :")
            (my-read "Indiquez votre année de naissance :")))
    Bonne investigation!

  3. #3
    Nouveau Membre du Club
    Femme Profil pro Chloé Garcia
    Étudiant
    Inscrit en
    avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Nom : Femme Chloé Garcia
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : avril 2012
    Messages : 59
    Points : 26
    Points
    26

    Par défaut Re:

    Merci pour votre réponse.

    Je comprends ce que vous voulez dire et j'ai bien séparé les fonctions de traitement dans tous les cas.

    Je ne sais pas d'où peut venir le problème avec la fonction read. Une énigme.

    J'ai changé de logiciel, et ai choisi LispWorks sur lequel mon code fonctionne sans problème.

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
  •