Env : mulțimea tuturor funcțiilor care fac corespondență între un Id și o Valoare
Constructori:
empty-env : () -> Env ( nicio corespondență )
extend-env : Id x Val x Env -> Env ( adaugă o nouă coresp., a.î. f(Id) = Val )
Observatori:
empty-env? : Env -> Boolean
apply->env : Env x Id -> Val ( află cât este f(Id) )
(empty-env? (empty-env)) = #t
(empty-env? (extend-env id val env)) = #f
(apply->env (empty-env) x) = 'Error
(apply->env (extend-env id val env) x) = val, dacă x == id
= (apply->env env x) , altfel
#lang racket
; constructor
(define (empty-env)
(lambda (obs dummy)
(cond ((eq? 'empty-env? obs) #t)
((eq? 'apply-env obs) 'Error))))
; constructor
(define (extend-env s1 v1 env)
(lambda (obs s2)
(cond ((eq? 'empty-env? obs) #f)
((eq? 'apply-env obs)
(cond ((eq? s1 s2) v1)
(else (apply-env env s2)))))))
; observers
(define (apply-env env v)
(env 'apply-env v))
(define (empty-env? env)
(env 'empty-env? 'dummy))
; some tests
(display (empty-env? (empty-env)))
(display (empty-env? (extend-env 'a 2 (empty-env))))
(display "\n")
(display (apply-env (extend-env 'a 2 (empty-env)) 'a))
Interfața
empty-env : () -> Env ( nicio corespondență )
extend-env : Id x Val x Env -> Env ( adaugă o nouă coresp., a.î. f(Id) = Val )
Observatori:
empty-env? : Env -> Boolean
apply->env : Env x Id -> Val ( află cât este f(Id) )
Specificații
(empty-env? (extend-env id val env)) = #f
(apply->env (empty-env) x) = 'Error
(apply->env (extend-env id val env) x) = val, dacă x == id
= (apply->env env x) , altfel
Implementare procedurală
; constructor
(define (empty-env)
(lambda (obs dummy)
(cond ((eq? 'empty-env? obs) #t)
((eq? 'apply-env obs) 'Error))))
; constructor
(define (extend-env s1 v1 env)
(lambda (obs s2)
(cond ((eq? 'empty-env? obs) #f)
((eq? 'apply-env obs)
(cond ((eq? s1 s2) v1)
(else (apply-env env s2)))))))
; observers
(define (apply-env env v)
(env 'apply-env v))
(define (empty-env? env)
(env 'empty-env? 'dummy))
; some tests
(display (empty-env? (empty-env)))
(display (empty-env? (extend-env 'a 2 (empty-env))))
(display "\n")
(display (apply-env (extend-env 'a 2 (empty-env)) 'a))
Niciun comentariu:
Trimiteți un comentariu