An environment E
associates a variable with a value, i.e. Environment=Var→Val
.
A common way to write an environment is as a set, e.g. if
1≤i≤n, xi∈Var∧vi∈Val
then the following is an environment:
{(x1,v1),(x2,v2),...,(xn,vn)}.
Environments often need to be combined.
If E1
and E2
are environments, and x
is a variable,
then the combination of the environments,
E1E2
, is defined as follows
E1E2(x) = E2(x)
if defined, otherwiseE1(x)
if defined, otherwise undefined.
Here we see that E2
overrides E1
.
The following is a simple implementation of environments written in Barry's Prolog but it should work on most other Prolog systems.
%%% %%% env_empty(?E) %%% %%% Succeeds if E is the empty environment. %%% env_empty([]). %%% %%% env_singleton(?Var, ?Val, +E) %%% env_singleton(+Var, +Val, ?E) %%% %%% Succeeds if E is an environment with a single binding of Var-Val. %%% env_singleton(Var, Val, [Var-Val]). %%% %%% env_compose(+E1, +E2, -E) %%% %%% Succeeds and unifies E to the composition of E1 and E2. %%% The bindings of E2 override the bindings of E1 in E. %%% env_compose(E1, E2, E) :- append(E2, E1, E). %%% %%% env_lookup(+Var, +Env, -Val) %%% %%% Succeeds and unifies Val to the value associated with Var if Var-Val is a binding %%% in Env. Fails otherwise. %%% env_lookup(Var, Env, Val) :- member(Var-Val, Env).
R. Burstall. Language Semantics and Implementation. Course Notes. 1994.
Copyright © 2014 Barry Watson. All rights reserved.