MODULE IDEPEND; % Routines for considering dependency among variables.
% Authors: Mary Ann Moore and Arthur C. Norman.
FLUID '(TAYLORVARIABLE);
EXPORTS DEPENDSPL,DEPENDSP,INVOLVESQ,INVOLVSF;
IMPORTS DOMAINP;
SYMBOLIC PROCEDURE DEPENDSP(X,V);
IF NULL V THEN T
ELSE IF DEPENDS(X,V) THEN X
ELSE IF ATOM X THEN IF X EQ V THEN X ELSE NIL
ELSE IF CAR X = '!*SQ THEN INVOLVESQ(CADR X,V)
ELSE IF TAYLORP X
THEN IF V EQ TAYLORVARIABLE THEN TAYLORVARIABLE ELSE NIL
ELSE BEGIN SCALAR W;
IF X=V THEN RETURN V;
% Check if a prefix form expression depends on the variable v.
% Note this assumes the form x is in normal prefix notation;
W := X; % preserve the dependency;
X := CDR X; % ready to recursively check arguments;
SCAN: IF NULL X THEN RETURN NIL; % no dependency found;
IF DEPENDSP(CAR X,V) THEN RETURN W;
X:=CDR X;
GO TO SCAN
END;
SYMBOLIC PROCEDURE INVOLVESQ(SQ,TERM);
INVOLVESF(NUMR SQ,TERM) OR INVOLVESF(DENR SQ,TERM);
SYMBOLIC PROCEDURE INVOLVESF(SF,TERM);
IF DOMAINP SF OR NULL SF THEN NIL
ELSE DEPENDSP(MVAR SF,TERM)
OR INVOLVESF(LC SF,TERM)
OR INVOLVESF(RED SF,TERM);
SYMBOLIC PROCEDURE DEPENDSPL(DEP!-LIST,VAR);
% True if any member of deplist (a list of prefix forms) depends on
% var.
DEP!-LIST
AND (DEPENDSP(CAR DEP!-LIST,VAR) OR DEPENDSPL(CDR DEP!-LIST,VAR));
SYMBOLIC SMACRO PROCEDURE TAYLORFUNCTION U; CAAR U;
SYMBOLIC PROCEDURE TAYLORP EXXPR;
% Sees if a random entity is a taylor expression.
NOT ATOM EXXPR
AND NOT ATOM CAR EXXPR
AND FLAGP(TAYLORFUNCTION EXXPR,'TAYLOR);
ENDMODULE;
END;