algbool.red 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. module algbool; % Evaluation functions for algebraic boolean operators.
  2. % Author: Anthony C. Hearn.
  3. % Copyright (c) 1987 The RAND Corporation. All rights reserved.
  4. symbolic procedure evalequal(u,v);
  5. begin scalar x;
  6. return if (x := getrtype u) neq getrtype v then nil
  7. else if null x
  8. then numberp(x := reval list('difference,u,v))
  9. and zerop x
  10. else u=v
  11. end;
  12. put('equal,'boolfn,'evalequal);
  13. % symbolic procedure equalreval u; 'equal . revlis u; % defined in eqn.
  14. % put('equal,'psopfn,'equalreval);
  15. put('equal,'rtypefn,'quoteequation);
  16. symbolic procedure quoteequation u; 'equation;
  17. symbolic procedure evalgreaterp(u,v);
  18. (lambda x;
  19. if not atom denr x or not domainp numr x
  20. then typerr(mk!*sq if minusf numr x then negsq x else x,"number")
  21. else numr x and !:minusp numr x)
  22. simp!* list('difference,v,u);
  23. put('greaterp,'boolfn,'evalgreaterp);
  24. symbolic procedure evalgeq(u,v); not evallessp(u,v);
  25. put('geq,'boolfn,'evalgeq);
  26. symbolic procedure evallessp(u,v); evalgreaterp(v,u);
  27. put('lessp,'boolfn,'evallessp);
  28. symbolic procedure evalleq(u,v); not evalgreaterp(u,v);
  29. put('leq,'boolfn,'evalleq);
  30. symbolic procedure evalneq(u,v); not evalequal(u,v);
  31. put('neq,'boolfn,'evalneq);
  32. symbolic procedure evalnumberp u;
  33. (if atom x then numberp x
  34. else if not(car x eq '!*sq) or not atom denr cadr x then nil
  35. else (atom y or flagp(car y,'numbertag)) where y=numr cadr x)
  36. where x=aeval u;
  37. put('numberp,'boolfn,'evalnumberp);
  38. % Number tags.
  39. flag('(!:rd!: !:cr!: !:rn!: !:crn!: !:mod!: !:gi!:),'numbertag);
  40. symbolic procedure ratnump x;
  41. % Returns T iff any prefix expression x is a rational number.
  42. atom numr(x := simp!* x) and atom denr x;
  43. flag ('(ratnump), 'boolean);
  44. endmodule;
  45. end;