function mkvalue(t:ValueClass):Value; var p:Value; begin new(p); p^.tag:=t; mkvalue:=p end; function mkint(nn:integer):Value; var p:Value; begin new(p); p^.tag:=intval; p^.n:=nn; mkint:=p end; function mkbool(bb:boolean):Value; var p:Value; begin new(p); p^.tag:=boolval; p^.b:=bb; mkbool:=p end; function mkchar( cc:char ):Value; var p:Value; begin new(p); p^.tag:=charval; p^.ch:=cc; mkchar:=p end; function mkfunc( code:tree; rho:Env ):Value; var p:Value; begin new(p); with p^ do begin tag:=funcval; e:=code; r:=rho end; mkfunc:=p end; function defer(x:tree; rho:Env):Value; {form closure} var p:Value; begin new(p); with p^ do begin tag:=deferval; e:=x; r:=rho end; defer:=p end {defer}; function cons( h, t :Value ):Value; var p :Value; begin new(p); with p^ do begin tag:=listval; hd:=h; tl:=t end; cons:=p ;conscells := conscells + 1 {statistics} end; {\fB Make Various Values. \fP}