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 :

besoin d'aide en Clisp


Sujet :

Lisp

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 18
    Points
    18
    Par défaut besoin d'aide en Clisp
    bonjour à tous,

    je suis entrain d'apprendre le langage LISP "Clisp", le debut été très bien tout été bien clair, mais là je commence à rencontrer des complications.. J'ai besoin de savoir comment construire une fonction en Clisp qui prend en argument une liste et retourne cette meme liste avec le premier element placé à la fin :exp

    (a b c d) --> (b c d a)


    j'ai pensé à faire un simple cons entre le "cdr" de la liste et son "car"... est ce faux??


    et une autre fonction qui fait la meme chose pour les n premiers elements de la liste passée en argument (n est passée également en argument), exp:

    ( 3 '(a b c d e)) ---> (d e a b c)



    je suis sur mandriva 2006
    merci pour votre aide...

  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
    Connais-tu la fonction reverse ?
    "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 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Trap D Voir le message
    Connais-tu la fonction reverse ?


    oui, bien évidement, mais mon but est de proceder avec les formes de Clisp genre "cons" "car" "cdr"... utiliser la récursivité... et non pas avec les fonctions prédéfinies...


    merci our ta réponse.

  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
    Dans ce cas, je crois que tu as besoin d'une première fonction pour extraire le premier élément de la liste, puis d'une deuxième fonction récursive pour envoyer cet élement en fin de liste.
    "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 à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    bon voila ce que j'ai fait:

    - en premier lieu j'ai fait une fonction recursive pour la concaténation de deux listes (ou bien éléments) de la maniere suivante:

    Code Lisp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (defun concat (l e)
          (if (null l) e
           (cons (car l) (concat (cdr l) e))))

    - puis j'ai fait la fonction "renver" qui fait appel à la premiere pour mettre le car d'une liste à la fin de celle ci de la maniere suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      (defun renv (l)
          (if (null l) ()
           (concat (cdr l) (car l))))
    le teste donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (renv '(a b c d))
    (B C D . A)
    alors qu'en dis tu???
    est ce biein propre?? et puis pour le resultat du teste, est ce bien une liste équivalente
    à (B C D A)??

    merci d'avance pour la réponse

  6. #6
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par magnum_cl9 Voir le message
    alors qu'en dis tu???
    est ce biein propre?? et puis pour le resultat du teste, est ce bien une liste équivalente
    à (B C D A)??
    Non, (B C D A) est une liste de 4 éléments, (B C D . A) est une liste de 2 éléments : la liste (B C D) puis A.

    --
    Jedaï

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    moui je comprend, mais comment pourrais je modifier mes fonctions de telle façon qu'elles me donnent exactement une seule liste à la fin (cad: (B C D A) et non pas (B C D . A) )......... je bloque

  8. #8
    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
    Considère ceci
    > (cons 'a 'b)
    (a . b)
    > (cons 'a '(b))
    (a b)
    "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

  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
    Citation Envoyé par Jedai Voir le message
    Non, (B C D A) est une liste de 4 éléments, (B C D . A) est une liste de 2 éléments : la liste (B C D) puis A.

    --
    Jedaï
    J'aurais dit 3 éléments B, C et D.A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Si je me souviens
    (B C D.A) peut s'écrire
     /\
    B /\
     C /\
      D  A
     
    et (B C D A) s'écrit lui
     /\
    B /\
     C /\
      D /\
       A ()
    La liste à deux éléments s'écrirait ((b c d) a).
    "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
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    bonjour,

    bon voila ce que j'ai fait :
    j'ai refait la fonction concat de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (defun concat (l e)
        (if (null l) (list e)
          (cons (car l) (concat (cdr l) e))))

    puis j'ai refait la fonction renv comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (defun renv ( l )
       (if (null l) ( )
          (concat (renv (cdr l)) (car l))))
    le teste a bien donné le resultat suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Break 5 [6]> (renv '(a b c d))
                            (D C B A)

    donc je pense que le premier resultat de ma premiere fonction renv n'ete pas bon car j'ai appliqué la concaténation sur le cdr (complet) de la liste ' l ' et le car de cette derniere, alors qu'ici j'ai parcouru le cdr de ' l ' (récursivement) pour mettre à la fin le car dans le cdr final de la liste (qui est vide (nil)), et ceci donne bien evidement toute la liste avec le car rattaché à la fin (dans le dernier cdr qui ete 'nil' ).


    je pense que le resultat est bon, mais, pour mon raisonnement, est il exacte??

    merci pour votre aide

    Ps: j'ai posté une autre question concernant le Ocaml je sais pas si vous pouvez me repondre ...

  11. #11
    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
    Ton code me parais correct, j'ais à peu près le même.
    pour ce qui est d' Ocaml, désolé, je n'en connais que le nom
    "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

  12. #12
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Citation Envoyé par Trap D Voir le message
    pour ce qui est d' Ocaml, désolé, je n'en connais que le nom
    toi aussi?
    Nemerle, mathématicopilier de bars, membre du triumvirat du CSTM, 3/4 centre

  13. #13
    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
    Eh oui, moi j'en suis resté au Lisp et au C, ça date quand même.
    OCaml et Haskell, c'est des langages de jeunots.
    "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

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    merci à vous tous pour vos solutions et éxplications, sérieusement je trouve que ce forum est trop efficace
    c'est pas grave pour le Ocaml j'ai bien retrouvé la réponse à mes quetions

    donc voila maintenant les choses deviennent de plus en plus claires.
    bon je voudrai également savoir une autre chose sur les listes: est ce possible de représenter une "file" ou bien une "pile" à l'aide d'une liste?? autrement dit, si je voudrais créer une file (ou pile ) vide, pourrais je par exemple faire ceci:

    si oui, ceci serait il vrai pour les vecteurs aussi??

  15. #15
    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
    Salut

    Comme tu découvres ce langage, je ne peux que te conseiller cette très bonne lecture : Structure and Interpretation of Computer Programs
    Tu y trouveras en particulier comment définir, pile, file vecteurs ...
    "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

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    t'aurais pas un cours en français qui parle de ça?? j'ai cherché partout et j'en trouve pas !!

  17. #17
    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
    En français, il y a un excellent bouquin : "Programmer avec Scheme, de la pratique à la théorie" de Jacques Chazarin, mais je ne crois pas qu'il y ait une édition électronique.
    "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

  18. #18
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Points : 10
    Points
    10
    Par défaut comment faire avec plusieurs return ds une fonction LISP
    salut,

    (defun unifierAtomes (E1 E2)
    (if (NOT(atom E1))(PROGN (setq temp E1) (setq E1 E2)(setq E2 temp)))
    ;;(if (equal E1 E2) 'nil)
    ;;(if (estUneVariable E1) (PROGN (if (apparait E1 E2) 'ECHEC) (return E1)))
    ;;(if (estUneVariable E2) (PROGN (return (append E1 E2)) (return 'ECHEC)))))



    dans cette fonction je dois retourner plusieurs variables achake cdt , j'ai une erreur "ABORT" et je sais pas comment corriger ma fonction

    Veuillez bien m'aider

  19. #19
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par belaidw Voir le message
    salut,

    (defun unifierAtomes (E1 E2)
    (if (NOT(atom E1))(PROGN (setq temp E1) (setq E1 E2)(setq E2 temp)))
    ;;(if (equal E1 E2) 'nil)
    ;;(if (estUneVariable E1) (PROGN (if (apparait E1 E2) 'ECHEC) (return E1)))
    ;;(if (estUneVariable E2) (PROGN (return (append E1 E2)) (return 'ECHEC)))))



    dans cette fonction je dois retourner plusieurs variables achake cdt , j'ai une erreur "ABORT" et je sais pas comment corriger ma fonction

    Veuillez bien m'aider
    Tu as ouvert un sujet pour ça. Poser une fois la question ne suffit pas ?

  20. #20
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Ça doit être aussi.

Discussions similaires

  1. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  2. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29
  3. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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