idepend.red 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. MODULE IDEPEND; % Routines for considering dependency among variables.
  2. % Authors: Mary Ann Moore and Arthur C. Norman.
  3. FLUID '(TAYLORVARIABLE);
  4. EXPORTS DEPENDSPL,DEPENDSP,INVOLVESQ,INVOLVSF;
  5. IMPORTS DOMAINP;
  6. SYMBOLIC PROCEDURE DEPENDSP(X,V);
  7. IF NULL V THEN T
  8. ELSE IF DEPENDS(X,V) THEN X
  9. ELSE IF ATOM X THEN IF X EQ V THEN X ELSE NIL
  10. ELSE IF CAR X = '!*SQ THEN INVOLVESQ(CADR X,V)
  11. ELSE IF TAYLORP X
  12. THEN IF V EQ TAYLORVARIABLE THEN TAYLORVARIABLE ELSE NIL
  13. ELSE BEGIN SCALAR W;
  14. IF X=V THEN RETURN V;
  15. % Check if a prefix form expression depends on the variable v.
  16. % Note this assumes the form x is in normal prefix notation;
  17. W := X; % preserve the dependency;
  18. X := CDR X; % ready to recursively check arguments;
  19. SCAN: IF NULL X THEN RETURN NIL; % no dependency found;
  20. IF DEPENDSP(CAR X,V) THEN RETURN W;
  21. X:=CDR X;
  22. GO TO SCAN
  23. END;
  24. SYMBOLIC PROCEDURE INVOLVESQ(SQ,TERM);
  25. INVOLVESF(NUMR SQ,TERM) OR INVOLVESF(DENR SQ,TERM);
  26. SYMBOLIC PROCEDURE INVOLVESF(SF,TERM);
  27. IF DOMAINP SF OR NULL SF THEN NIL
  28. ELSE DEPENDSP(MVAR SF,TERM)
  29. OR INVOLVESF(LC SF,TERM)
  30. OR INVOLVESF(RED SF,TERM);
  31. SYMBOLIC PROCEDURE DEPENDSPL(DEP!-LIST,VAR);
  32. % True if any member of deplist (a list of prefix forms) depends on
  33. % var.
  34. DEP!-LIST
  35. AND (DEPENDSP(CAR DEP!-LIST,VAR) OR DEPENDSPL(CDR DEP!-LIST,VAR));
  36. SYMBOLIC SMACRO PROCEDURE TAYLORFUNCTION U; CAAR U;
  37. SYMBOLIC PROCEDURE TAYLORP EXXPR;
  38. % Sees if a random entity is a taylor expression.
  39. NOT ATOM EXXPR
  40. AND NOT ATOM CAR EXXPR
  41. AND FLAGP(TAYLORFUNCTION EXXPR,'TAYLOR);
  42. ENDMODULE;
  43. END;