624 |
;;; env-initial: -> Environnement
;;; (env-initial) rend l'environnement initial, i.e. l'environnement qui ;;; contient toutes les primitives. |
480 |
;;; variable-val: Variable * Environnement -> Valeur
;;; (variable-val var env) rend la valeur de la variable «var» dans ;;; l'environnement «env». |
492 |
;;; env-extension: Environnement * LISTE[Variable] * LISTE[Valeur] -> Environnement
;;; (env-extension env vars vals) rend l'environnement «env» étendu avec ;;; un bloc d'activation liant les variables «vars» aux valeurs «vals». |
503 |
;;; env-add-liaisons: LISTE[Liaison] * Environnement -> Environnement
;;; (env-add-liaisons liaisons env) rend l'environnement obtenu en ajoutant, ;;; à l'environnement «env», les liaisons «liaisons». |
516 |
;;; env-enrichissement: Environnement * LISTE[Definition] -> Environnement
;;; (env-enrichissement env defs) rend l'environnement «env» étendu avec un ;;; bloc d'activation pour les définitions fonctionnelles «defs». |
480 |
;;; variable-val: Variable * Environnement -> Valeur
;;; (variable-val var env) rend la valeur de la variable «var» dans ;;; l'environnement «env». (define (variable-val var env) (if (env-non-vide? env) (let ((bloc (env-1er-bloc env))) (let ((variables (blocActivation-variables bloc))) (if (member var variables) (blocActivation-val bloc var) (variable-val var (env-reste env))))) (deug-erreur 'variable-val "variable inconnue" var) ) ) |
540 |
;;; env-non-vide?: Environnement -> bool
;;; (env-non-vide? env) rend #t ssi l'environnement «env» n'est pas vide |
551 |
;;; env-1er-bloc: Environnement -> BlocActivation
;;; ERREUR lorsque l'environnement donné est vide ;;; (env-1er-bloc env) rend le premier (i.e. celui qui a été ajouté en ;;; dernier) bloc d'activation de l'environnement «env». |
558 |
;;; env-reste: Environnement -> Environnement
;;; ERREUR lorsque l'environnement donné est vide ;;; (env-reste env) rend l'environnement obtenu en supprimant le premier ;;; bloc d'activation de l'environnement «env». |
570 |
;;; blocActivation-variables: BlocActivation -> LISTE[Variable]
;;; (blocActivation-variables bloc) rend la liste des variables définies ;;; dans le bloc d'activation «bloc» |
576 |
;;; blocActivation-val: BlocActivation * Variable -> Valeur
;;; HYPOTHESE: «var» est une variable définie dans «bloc» ;;; (blocActivation-val bloc var) rend la valeur de la variable «var» ;;; dans le bloc d'activation «bloc». |
464 |
;;; fonction-creation: Definition * Environnement -> Fonction
;;; (fonction-creation definition env) rend la fonction définie par ;;; «definition» dans l'environnement «env». (define (fonction-creation definition env) (list '*fonction* (definition-variables definition) (definition-corps definition) env ) ) |
545 |
;;; env-add: Environnement * BlocActivation -> Environnement
;;; (env-add bloc env) rend l'environnement obtenu en ajoutant devant ;;; l'environnement «env» le bloc d'activation «bloc». |
584 |
;;; blocActivation-creation: LISTE[Variable] -> BlocActivation
;;; (blocActivation-creation vars) rend un bloc d'activation contenant ;;; la liste des variables «vars», avec la place qu'il faut pour les valeurs ;;; de ces variables, cette place n'étant pas remplie. |
594 |
;;; blocActivation-mettre-valeurs!: BlocActivation * LISTE[Valeur] -> Rien
;;; (blocActivation-mettre-valeurs! bloc vals) affecte les valeurs «vals» (données ;;; sous forme de liste) dans le bloc d'activation «bloc» (qui est un vecteur) |
516 |
;;; env-enrichissement: Environnement * LISTE[Definition] -> Environnement
;;; (env-enrichissement env defs) rend l'environnement «env» étendu avec un ;;; bloc d'activation pour les définitions fonctionnelles «defs». (define (env-enrichissement env defs) (let ((noms (deug-map definition-nom-fonction defs))) (let ((bloc (blocActivation-creation noms))) (let ((env-plus (env-add bloc env))) (define (fonction-creation-env-plus definition) (fonction-creation definition env-plus)) (begin (blocActivation-mettre-valeurs! bloc (deug-map fonction-creation-env-plus defs)) env-plus ) ) ) ) ) |
492 |
;;; env-extension: Environnement * LISTE[Variable] * LISTE[Valeur] -> Environnement
;;; (env-extension env vars vals) rend l'environnement «env» étendu avec ;;; un bloc d'activation liant les variables «vars» aux valeurs «vals». (define (env-extension env vars vals) (if (= (length vars) (length vals)) (let ((bloc (blocActivation-creation vars))) (begin (blocActivation-mettre-valeurs! bloc vals) (env-add bloc env) ) ) (deug-erreur 'env-extension "arité incorrecte" (list vars vals)) ) ) |
503 |
;;; env-add-liaisons: LISTE[Liaison] * Environnement -> Environnement
;;; (env-add-liaisons liaisons env) rend l'environnement obtenu en ajoutant, ;;; à l'environnement «env», les liaisons «liaisons». (define (env-add-liaisons liaisons env) ;; eval-env : Expression -> Valeur ;; (eval-env exp) rend la valeur de «exp» dans l'environnement «env» (define (eval-env exp) (evaluation exp env)) ;; expression de (env-add-liaisons liaisons env) : (env-extension env (deug-map liaison-variable liaisons) (deug-map eval-env (deug-map liaison-exp liaisons)) ) ) |
536 |
;;; env-vide: -> Environnement
;;; (env-vide) rend l'environnement vide |
540 |
;;; env-non-vide?: Environnement -> bool
;;; (env-non-vide? env) rend #t ssi l'environnement «env» n'est pas vide |
545 |
;;; env-add: Environnement * BlocActivation -> Environnement
;;; (env-add bloc env) rend l'environnement obtenu en ajoutant devant ;;; l'environnement «env» le bloc d'activation «bloc». |
551 |
;;; env-1er-bloc: Environnement -> BlocActivation
;;; ERREUR lorsque l'environnement donné est vide ;;; (env-1er-bloc env) rend le premier (i.e. celui qui a été ajouté en ;;; dernier) bloc d'activation de l'environnement «env». |
558 |
;;; env-reste: Environnement -> Environnement
;;; ERREUR lorsque l'environnement donné est vide ;;; (env-reste env) rend l'environnement obtenu en supprimant le premier ;;; bloc d'activation de l'environnement «env». |
570 |
;;; blocActivation-variables: BlocActivation -> LISTE[Variable]
;;; (blocActivation-variables bloc) rend la liste des variables définies ;;; dans le bloc d'activation «bloc» |
576 |
;;; blocActivation-val: BlocActivation * Variable -> Valeur
;;; HYPOTHESE: «var» est une variable définie dans «bloc» ;;; (blocActivation-val bloc var) rend la valeur de la variable «var» ;;; dans le bloc d'activation «bloc». |
584 |
;;; blocActivation-creation: LISTE[Variable] -> BlocActivation
;;; (blocActivation-creation vars) rend un bloc d'activation contenant ;;; la liste des variables «vars», avec la place qu'il faut pour les valeurs ;;; de ces variables, cette place n'étant pas remplie. |
594 |
;;; blocActivation-mettre-valeurs!: BlocActivation * LISTE[Valeur] -> Rien
;;; (blocActivation-mettre-valeurs! bloc vals) affecte les valeurs «vals» (données ;;; sous forme de liste) dans le bloc d'activation «bloc» (qui est un vecteur) |
570 |
;;; blocActivation-variables: BlocActivation -> LISTE[Variable]
;;; (blocActivation-variables bloc) rend la liste des variables définies ;;; dans le bloc d'activation «bloc» (define (blocActivation-variables bloc) (vector-ref bloc 0) ) |
576 |
;;; blocActivation-val: BlocActivation * Variable -> Valeur
;;; HYPOTHESE: «var» est une variable définie dans «bloc» ;;; (blocActivation-val bloc var) rend la valeur de la variable «var» ;;; dans le bloc d'activation «bloc». (define (blocActivation-val bloc var) (let ((i (rang var (blocActivation-variables bloc)))) (vector-ref bloc i) ) ) |
584 |
;;; blocActivation-creation: LISTE[Variable] -> BlocActivation
;;; (blocActivation-creation vars) rend un bloc d'activation contenant ;;; la liste des variables «vars», avec la place qu'il faut pour les valeurs ;;; de ces variables, cette place n'étant pas remplie. (define (blocActivation-creation vars) (let ((bloc (make-vector (+ 1 (length vars))))) (begin (vector-set! bloc 0 vars) bloc ) ) ) |
594 |
;;; blocActivation-mettre-valeurs!: BlocActivation * LISTE[Valeur] -> Rien
;;; (blocActivation-mettre-valeurs! bloc vals) affecte les valeurs «vals» (données ;;; sous forme de liste) dans le bloc d'activation «bloc» (qui est un vecteur) (define (blocActivation-mettre-valeurs! bloc vals) ;; remplir!: nat * LISTE[Valeur] -> Rien ;; (remplir! i vals) remplit les cases du vecteur «bloc», à partir de ;; l'indice «i», avec les valeurs de la liste «vals» (et dans le même ordre). (define (remplir! i vals) (if (pair? vals) (begin (vector-set! bloc i (car vals)) (remplir! (+ i 1) (cdr vals)) ) ) ) (remplir! 1 vals) ) |
633 |
;;; description-primitive: Variable * (Valeur ... -> Valeur)
;;; * (num * num -> bool) * num -> DescriptionPrimitive ;;; (description-primitive var f comparator arite) rend la description de la ;;; primitive désignée par «var», implantée dans le Scheme sous-jacent par «f» et ;;; dont l'arité est définie par «comparator» «arite». (define (description-primitive var f comparator arite) (list var f comparator arite)) |
641 |
;;; descriptions-primitives: -> LISTE[DescriptionPrimitive]
;;; (descriptions-primitives) rend la liste des descriptions de toutes les ;;; primitives
(define (descriptions-primitives)
...(cons (description-primitive 'car car = 1)
(cons (description-primitive 'erreur erreur >= 2)
|
674 |
'())))))))))))))))))))))))))))))) )
|
624 |
;;; env-initial: -> Environnement
;;; (env-initial) rend l'environnement initial, i.e. l'environnement qui ;;; contient toutes les primitives. (define (env-initial) (env-extension (env-vide) (deug-map car (descriptions-primitives)) (deug-map primitive-creation (deug-map cdr (descriptions-primitives)) ) ) ) |