commit b677d2fd86461fbfbcfab6f4e5a84b8ac520f094 parent 319aa2789eeacfab999236c5940e290d8283618b Author: Bertrand BRUN <bertrand0brun@gmail.com> Date: Sun, 21 Nov 2010 20:24:19 +0100 Fin de la partie des meta-definition Diffstat:
| M | scheme/meval-scheme.scm | | | 37 | +++++++++++++++++++++++++++++++++++++ |
1 file changed, 37 insertions(+), 0 deletions(-)
diff --git a/scheme/meval-scheme.scm b/scheme/meval-scheme.scm @@ -436,3 +436,39 @@ ;; }}} Primitives +;; {{{ Fonction-meta-definies + +;; Une fonction definie est implantee par un 4-uplet: +;; - le premier element est le symbole *fonction* (pour les reconnaitre) +;; - le second element est la liste des variables de la definition de la fonction +;; - le troisieme element est le corps de la definition de la fonction +;; - le dernier element est l'environnement ou est definie la fonction + +;; fonction?: Valeur -> bool +;; (fonction? val) rend vrai ssi "val" est une fonction meta-definie +(define (fonction? val) + (if (pair? val) + (equal? (car val) '*fonction*) + #f)) + +;; fonction-invocation: Fonction * LISTE[Valeur] -> Valeur +;; (fonction-invocation f args) rend la valeur de l'application de la fonction +;; meta-definie "f" aux element de "args" +(define (fonction-invocation f args) + (let ((variables (cadr f)) + (corps (caddr f)) + (env (cadddr f))) + (corps-eval corps (env-extension env variables args)))) + +;; fonction-creation: Definition * Environnement -> Fonction +;; (fonction-creation definition env) rend la fonction definie par "definition" dans +;; l'environnement "env" +(define (fonction-creation definition env) + (list '*fonction* + (definition-variables definition) + (definition-corps definition) + env)) + +;; }}} Fonctions-meta-definies +;; }}} Valeurs-fonctionnelles +;; }}} Barriere-interpretation +\ No newline at end of file