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 :

Convertion caractère/nombre en lisp


Sujet :

Lisp

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Points : 44
    Points
    44
    Par défaut Convertion caractère/nombre en lisp
    Bonjour à tous,

    j'ai un petit soucis que je n'arrive pas à résoudre sous lisp.

    J'ai une liste et je cherche à en tirer le dernier élément, pour cela j'utilise last, quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (let ((max (last liste))) )
    Le soucis est que quand je veux utiliser "max" pour une opération (une division en l'occurrence), lisp me dit que "max" n'est pas un nombre. Je suppose donc qu'il considère cet élément comme une chaine de caractère.

    Suis-je complètement dans le faux? Si oui, où est mon erreur? Si non, comment transformer une chaine de caractères en nombre?

    Merci d'avance!

  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
    Que fait exactement la fonction max ?
    D'habitude elle renvoie le plus grand de deux éléments donc que signifie (max (last liste)) ?
    Il faudrait un peu plus de détails.
    Ton message d'erreur semble signifier que tu oublies la parenthèse ouvrante avant max.
    "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 du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Points : 44
    Points
    44
    Par défaut
    En fait "max" ici n'est pas une fonction mais une variable à laquelle je donne la dernière valeur de ma liste "liste". En effet j'ai pensé au début que ça pouvait venir de ça, mais en remplaçant "max" par "toto" (il me semble que ça n'est pas une fonction de lisp), le problème est le même, lisp me dit que 12000 (la valeur de "last liste") n'est pas un nombre.

  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
    Il faudrait que tu montres ton code.
    "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
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Points : 44
    Points
    44
    Par défaut
    ok voici mon code (en simplifié):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    (defparameter liste '(0 750 2000 21000))
     
    (defun fonction (liste)
        (let ((toto (last liste)))
              (let ((nombre (round (/ toto 1000) ) )) 
              )
         )
    )
     
    (fonction liste)
    Quand j'évalue le programme, j'ai un message d'erreur qui dit:

    "In / of ((21000) 1000) arguments should be of type NUMBER."

  6. #6
    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
    As-tu essayer de taper (last liste) pour voir le résultat ?
    Tu trouveras tout de suite ton erreur !
    "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

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Points : 44
    Points
    44
    Par défaut
    Ah oui ça me sort (21000)...mais comment je peux juste récupérer 21000 dans ce cas?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 57
    Points : 44
    Points
    44
    Par défaut
    En utilisant car...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (let ((max (car (last liste) ) )) )
    ok!

    Merci bien, ça fonctionne maintenant!

  9. #9
    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
    Pensez au clic sur
    "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

  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
    Citation Envoyé par Tibtib Voir le message
    En utilisant car...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (let ((max (car (last liste) ) )) )
    ok!

    Merci bien, ça fonctionne maintenant!
    Un grand classique!

    last retourne le dernier cons d'une liste et non le dernier élément!

    J'imagine que la raison, c'est d'avoir une seule fonction qui permette à la fois:
    * de vérifier si la liste finit ou non par une paire pointée (avec un (null (cdr (last l)))),
    * d'allonger la liste (avec un (rplacd (last l) ll))
    * et d'obtenir le dernier élément de la liste (avec un (car (last l))).

    )jack(

Discussions similaires

  1. convertion caractères accentué
    Par label55 dans le forum C#
    Réponses: 1
    Dernier message: 17/03/2009, 11h46
  2. convertion de nombre str en int ou float.. assez bizarre..
    Par italiasky dans le forum Général Python
    Réponses: 7
    Dernier message: 26/04/2008, 09h36
  3. Convertion Caractères URL
    Par papawemba dans le forum C#
    Réponses: 1
    Dernier message: 27/06/2007, 13h53
  4. [VB.NET2.0] SerialPort - Convertion caractère en binaire
    Par Emcy dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/07/2006, 09h14

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