function apply( fn, ap :Value ):Value; { apply a function fn to param ap } { apply : (Value->Value) -> Value -> Value } begin if fn^.e^.fparam^.tag = emptycon then { (L().e)ap } begin force(ap); if ap^.tag = emptyval then apply := eval(fn^.e^.body, fn^.r) else error('L().e exp ') end else apply := eval(fn^.e^.body, bind(fn^.e^.fparam^.id, ap, fn^.r)) end {apply}; {\fB Apply a Function to a Parameter. \fP}