Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Lisp
Lisp Forum d'entraide sur la programmation en langages fonctionnels Lisp et Common Lisp
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/01/2013, 20h53   #1
Lyadrielle
Futur Membre du Club
 
Femme Chloé Garcia
Étudiant
Inscription : avril 2012
Messages : 36
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 : 36
Points : 17
Points : 17
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...!
Lyadrielle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 11h20   #2
jack-ft
Membre Expert
 
Inscription : avril 2008
Messages : 799
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 799
Points : 1 808
Points : 1 808
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!
jack-ft est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 00h51   #3
Lyadrielle
Futur Membre du Club
 
Femme Chloé Garcia
Étudiant
Inscription : avril 2012
Messages : 36
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 : 36
Points : 17
Points : 17
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.
Lyadrielle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h32.


 
 
 
 
Partenaires

Hébergement Web