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 :

Lister les variables d'une fonction Clisp


Sujet :

Lisp

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2018
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Lister les variables d'une fonction Clisp
    Bonjour
    à tous et à toutes.
    Je bloque un peu sur la création d'un ptit soft en Clisp. Et j'aimerai quelques pistes parce que j'avoue que je sèche pas mal.
    Le soft est censé lire un fichier .lisp, lister les fonctions qui sont dedans (j'en suis pas encore là) et ajouter à une liste associative la description de la fonction trouvée, exemple pour plus de clartée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ;si une fonction test-char qui test si la présence de caractère dans une liste globale, la fonction en elle même ne sert à rien elle est juste là pour l'exemple.
    ; Nom  :test-char
    ; Arguments : arg1 arg2
    ; global : GLOBAL
    ; call : member
    (defun test-char (arg1 arg2)
      (cond
        ((member arg1 GLOBAL) nil)
        ((member arg2 GLOBAL) t) ) )
    À partir d'une definition comme ça je récupère la méthode de définition avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    (defun getdef (function) (car (get function 'system::definition)))
     
    (defun get-définisseur (fonction)
      (car (getdef fonction)))
    les arguments avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (defun get-paramètres (fonction)
      (car (cddr(getdef fonction))))
    et là je bloque, je dois récupérer la ou les variables globales, j'avais donc fait quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    ; l'argument fonction est le (cddr (getdef 'test-char)) donc la définiton de la fonciton, sans le (defun F (x y) et arguments la liste des arguments récupérée avec (get-paramètres (fonction))
    (defun get-globales (fonction arguments)
      (cond
        ((atom fonction) nil)
        ((listp (car fonction)) (cons(get-globales (car fonction) arguments) (get-globales (cdr fonction) arguments)))
        ((cond
          ((equal (fboundp (car fonction)) t) (get-globales (cdr fonction) arguments))
          ((not (member (car fonction) arguments)) (cons (car fonction) (get-globales (cdr fonction) arguments)))))))
     
    ;
    ; le but final est de regrouper ces fonctions puis générer une liste associative de ce type : 
    '(test-char
       (définisseur . defun)
       (paramètres arg1 arg2)
       (globales GLOBALE)
       (appelle member )

    ou je teste si l'atom de la liste est une sous-liste, puis si c'est une fonction et enfin si il n'est pas membre de la liste des arguments, donc une variable globale. Mais ça ne marche pas et je sens que je suis sur une fausse piste. Ça fait un moment que j'ai pas fait de Clisp et je pense que je me plante carrément sur la méthodologie. Devrais-je executer la fonction que j'essaye de décrire et récupérer les valeurs envoyée au top-level ?

    Voilà voilà. J'espère que j'ai été clair (je crois pas :/).
    Merci à ceux qui voudront bien m'aider dans cette tâche qui... bah qui ne sert pas à grand à l'humanité j'en ai peur.


    (ps : RIP Monsieur Hawking)


    [edit : je suis tombé sur ce lien https://www.developpez.net/forums/d1...ll-get-global/ en fouillant un peu mieux. je vais aller zieuter tout ça, cependant si vous avez une idée, je suis toujours preneur. Bonne journée à vous)

  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
    Est-ce que tu es sûr qu’il faut charger le fichier dans l’image de lisp (par example, avec LOAD) et examiner ce qui s’est passé dans l’image ? Parce que ça paraît difficile et je doute qu’il y ait une solution portable. Il est beaucoup plus simple de lire le fichier forme à forme avec READ sans évaluer les formes, en tenant compte des formes DEFUN, par exemple.

    La limitation de cette approche est que l’on peut utiliser de propres macros pour définir les fonctions.

    Je ne comprends pas exactement qu’est-ce que tu veux dire par les « variables globales d’une fonction ».

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/02/2014, 16h40
  2. Comment exploiter les variables dans une fonction ?
    Par spawns dans le forum Langage
    Réponses: 2
    Dernier message: 20/06/2011, 00h06
  3. récupérer les echo d'une fonction dans une variable
    Par CaviarNAS dans le forum Langage
    Réponses: 2
    Dernier message: 29/12/2009, 16h46
  4. Réponses: 4
    Dernier message: 31/08/2009, 17h17
  5. [VBA-E] Lister les arguments d'une fonction
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/02/2006, 12h04

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