Bonjour,
J'ai besoin d'un peu d'aide pour ces fonctions get-call et get-global.
C'est pour un exercice, je dois créer ces deux fonction.
get-call retourne une liste des fonctions appelées dans une fonction.
get-global retourne une liste des variables globales d'une fonction.
Pour l'instant j'ai fait get-call qui semble fonctionner mais qui n'est pas optimale du tout !
Je commence par lier fun à la définition de la fonction ajoute grâce à getdef.
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 (defun get-call (function &aux (call nil)) (setq body (flaten (car (subseq function 3)))) (loop for value in body do (if (and (not (eq value (car (subseq fun 1 2)))) (member value funlist) (not (member value call)) ) (setq call (append (list value) call)) ) ) call ) (defun flaten (liste) (cond ((atom liste) nil) ((listp (car liste)) (append (flaten (car liste)) (flaten (cdr liste)))) (t (cons (car liste) (flaten (cdr liste)))) ) ) (defun getdef (function) (car (get function 'system::definition)))
Puis j'utilise get-call pour obtenir la liste des fonctions appelées dans ajoute.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 > (setq fun (getdef 'ajoute)) (DEFUN AJOUTE (W TREE) (COND ((NOT TREE) (LIST W)) ((FRENCH-STRING>= W (CAR TREE)) (LIST (CAR TREE) (CADR TREE) (AJOUTE W (CADDR TREE)))) ((APPEND (LIST (CAR TREE)) (CONS (AJOUTE W (CADR TREE)) NIL) (CADDR TREE)))))
Bon ça marche mais je pense qu'il y a possibilité de faire ça beaucoup plus simplement, cependant c'est tout ce que j'ai trouvé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 (get-call fun) (FRENCH-STRING>=)
Quant à la fonction get-global je n'ai vraiment pas d'idée.
Merci d'avance pour votre aide !
Partager