function bind( x:alfa; val:Value; r:Env ):Env; { :Ide -> Value -> Env -> Env } var p:Env; begin new(p); envcells:=envcells+1; with p^ do begin id:=x; v:=val; next:=r end; bind:=p end {bind}; function applyenv( r:Env; x:alfa ):Value; { :Env -> Ide -> Value } begin LastId := x; {debugging} if r=nil then error('undec id ') else if r^.id=x then begin force( r^.v ); {only called from eval} applyenv := r^.v end else applyenv := applyenv( r^.next, x ) end {applyenv}; {\fB Build and Search Environment. \fP}