12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- module reform; % Reformulate expressions using C-constant substitution.
- % Authors: Mary Ann Moore and Arthur C. Norman.
- fluid '(!*trint cmap cval loglist ulist);
- exports logstosq,substinulist;
- imports prepsq,mksp,nth,multsq,addsq,domainp,invsq,plusdf;
- symbolic procedure substinulist ulst;
- % Substitutes for the C-constants in the values of the U's given in
- % ULST. Result is a D.F.
- if null ulst then nil
- else begin scalar temp,lcu;
- lcu:=lc ulst;
- temp:=evaluateuconst numr lcu;
- if null numr temp then temp:=nil
- else temp:=((lpow ulst) .*
- !*multsq(temp,!*invsq(denr lcu ./ 1))) .+ nil;
- return plusdf(temp,substinulist red ulst)
- end;
- symbolic procedure evaluateuconst coefft;
- % Substitutes for the C-constants into COEFFT (=S.F.). Result is S.Q.;
- if null coefft or domainp coefft then coefft ./ 1
- else begin scalar temp;
- if null(temp:=assoc(mvar coefft,cmap)) then
- temp:=(!*p2f lpow coefft) ./ 1
- else temp:=getv(cval,cdr temp);
- temp:=!*multsq(temp,evaluateuconst(lc coefft));
- % Next line had addsq previously
- return !*addsq(temp,evaluateuconst(red coefft))
- end;
- symbolic procedure logstosq;
- % Converts LOGLIST to sum of the log terms as a S.Q.;
- begin scalar lglst,logsq,i,temp;
- i:=1;
- lglst:=loglist;
- logsq:=nil ./ 1;
- loop: if null lglst then return logsq;
- temp:=cddr car lglst;
- %% if !*trint
- %% then <<printc "SF arg for log etc ="; printc temp>>;
- if not (caar lglst='iden) then <<
- temp:=prepsq temp; %convert to prefix form.
- temp:=list(caar lglst,temp); %function name.
- temp:=((mksp(temp,1) .* 1) .+ nil) ./ 1 >>;
- temp:=!*multsq(temp,getv(cval,i));
- % Next line had addsq previously
- logsq:=!*addsq(temp,logsq);
- lglst:=cdr lglst;
- i:=i+1;
- go to loop
- end;
- endmodule;
- end;
|