commit 4fed13729255f18f4933d703f1a1f0b0f3ac54fd
parent 218ab7a0f328169149fce57241ea8d3833e35298
Author: Bertrand BRUN <bertrand0brun@gmail.com>
Date: Sun, 21 Nov 2010 19:26:43 +0100
Ajout de la partie Valeur-non-fonctionnelles et debut de la parti Valeur-fonctionnelles
Diffstat:
1 file changed, 45 insertions(+), 0 deletions(-)
diff --git a/scheme/meval-scheme.scm b/scheme/meval-scheme.scm
@@ -354,3 +354,47 @@
;; }}} Evaluateur
+;; {{{ Barriere-interpretation
+
+;; Un programme Scheme comme LISP decrit deux sortes d'objets: les valeurs non fonctionnelles
+;; (entier, bool, liste...) et les valeurs fonctionnelles
+
+;; {{{ Valeurs-non-fonctionnelles
+
+;; citation-val: Citation -> Valeur/non fonctionnelle/
+;; (citation-val cit) rend la valeur de la citation "cit"
+(define (citation-val cit)
+ (if (pair? cit)
+ (cadr cit)
+ cit))
+
+;; }}} Valeur-non-fonctionnelles
+
+;; {{{ Valeur-fonctionnelles
+
+;; Il y a deux type de fonctions, les fonctions predefinies (reconnues par primitive? en Scheme
+;; et special-form-p en LISP) et les fonctions du programme en cours d'evaluation (creer par
+;; fonction-creation)
+
+;; invocable?: Valeur -> bool
+;; (invocable? val) rend vrai ssi "val" est un fonction (primitive ou definie)
+(define (invocable? val)
+ (if (primitive? val)
+ #t
+ (fonction? val)))
+
+;; invocation: Invocable * LISTE[Valeur] -> Valeur
+;; (invocation f args) rend la valeur de l'application de "f" aux elements de "vals"
+(define (invocation f args)
+ (if (primitive? f)
+ (primitive-invocation f args)
+ (fonction-invocation f args)))
+
+;; {{{ Primitives
+
+;; Une primitive est implantee par un 4-uplet :
+;; - le premier element est le symbole *primitive* (pour les reconnaitre)
+;; - le second element est la fonction du Scheme sous-jacent qui implante la primitive,
+;; - le troisieme element est un comparateur (= ou >=)
+;; - le quatrieme element est un entier naturel, ces deux derniers elements permettant
+;; de specifier l'arite de la primitive.
+\ No newline at end of file