function D( decs:tree; rho:Env ):Env; { D :Decs -> Env -> Env } var localrho :Env; function D2( decs :tree; local, global :Env ):Env; begin if decs=nil then D2:=global else D2:=bind(decs^.hd^.name, defer(decs^.hd^.val,local), D2(decs^.tl, local, global)) end; begin if decs=nil then D:=rho else begin if decs^.recursive then begin localrho:=bind('-dummy----', nil, rho); localrho^.next:=D2( decs, localrho, rho ); D:=localrho end else D:=D2( decs, rho, rho ) end end {D}; {\fB Execute Declarations. \fP}