• [^] # Re: Doué?

    Posté par (site web personnel) . En réponse au message Homoiconicité. Évalué à 2.

    Voilà un petit exemple de session scheme (avec guile):

    guile> (define (add a b)(+ a b))
    guile> (procedure? add)
    #t
    guile> (procedure-source add)
    (lambda (a b) (+ a b))
    guile> (eq? 'lambda (procedure-source add))
    #f
    guile> (list? (procedure-source add))
    #t
    guile> (define (procedure-args f)
     (if (procedure? f)
     (let ((source (procedure-source f)))
     (if (list? source)
     (cadr source)
     '()))
     '()))
    guile> (procedure-args add)
    (a b)
    
    

    Comme tu vois on peut définir une fonction qui peut ausculter une autre fonction et renvoyer la liste des symboles utilisés comme argument à la fonction.

    Si tu veux t'entraîner tu peux essayer d'effectivement écrire une fonction qui trouve les variables globales utilisées par une fonction — quitte à ne pas supporter toutes les constructions du langage pour simplifier un peu.