(FILECREATED " 4-Sep-85 13:11:54" {QV}<IDL>SOURCES>ARITHMETIC.;9 6142 changes to: (VARS ARITHMETICCOMS) previous date: " 3-Sep-85 17:28:31" {QV}<IDL>SOURCES>ARITHMETIC.;8) (* Copyright (c) 1983, 1984, 1985 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT ARITHMETICCOMS) (RPAQQ ARITHMETICCOMS [(* New IDL functions that operate on and produce arithmetic values.) (FNS PLUSP ROUND SAME SCALARP TRANSLATE) (PROP ARGNAMES TRANSLATE) (VARS (E 2.718282) (PI 3.141594)) (DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) (LAMA TRANSLATE]) (* New IDL functions that operate on and produce arithmetic values.) (DEFINEQ (PLUSP [ULAMBDA ((X SCALAR)) (* rmk: " 6-AUG-78 11:42" posted: " 6-AUG-78 11:43") (* T if X is positive.) (AND X (GREATERP.LISP X 0))]) (ROUND [ULAMBDA ((VAL (EXPECTS SCALAR)) (INTERVAL (EXPECTS SCALAR)) (RETURNS SCALAR)) (* bas: " 9-FEB-83 15:13") (OR INTERVAL INTERVAL←1) [AND VAL (TIMES INTERVAL (IVALUE (FIX (FPLUS (FQUOTIENT VAL INTERVAL) (if (MINUSP VAL) then -.5 else .5]]) (SAME [ULAMBDA ((A (EXPECTS SCALAR)) (B (EXPECTS SCALAR)) (RETURNS INTEGER)) (* bas: "21-DEC-78 10:52" posted: "21-DEC-78 10:51") (if (EQP A B) then 1 else 0)]) (SCALARP [ULAMBDA (S) (* rmk: "19-JUL-78 10:58" posted: "19-JUL-78 11:01") (* Predicate for scalar-hood) (AND (OR (type? SCALAR S) (VSCALARP S)) T)]) (TRANSLATE [LAMBDA TRANSLATENARGS (* DECLARATIONS: (RECORD ARGRECORD (S TABLE DEFAULT))) (* bas: "11-FEB-83 11:49") (* Translates S through TABLE returning translation or DEFAULT if specified otherwise S. A no spread so we can test for supplied NIL for DEFAULT. TABLE is either m*1, in which case the translation is I such that S=TABLE@{I}; m*2, in which case the translation is TABLE@{I,2} where I is the first index such that S=TABLE@{I,1}; or m*3, in which case any number between TABLE@{I,1} and TABLE@{I,2} is translated to TABLE@{I,3}. In the 3-column case, NIL only matches NIL-NIL, NIL is -infinity in NIL-X, +infinity in X-NIL.) (DECLARE (SPECVARS TRANSLATENARGS)) (UENTRY (QUOTE TRANSLATE) (OR (IGREATERP TRANSLATENARGS 1) (UERROR "Missing translation table")) (EAPPLY* [FUNCTION [ULAMBDA ((S SCALAR (* Value to be translated)) (TABLE (ONEOF VECTOR MATRIX) (* Translation table)) (DEFAULT SCALAR (* Value if no match found)) (RETURNS SCALAR)) (DECL (TRANSLATENARGS (BOUNDIN TRANSLATE))) (bind TELT (I ← 0) (TTYPE ←(if (EQ (fetch NDIMS of TABLE) 1) then 1 else (GETRELT (fetch SHAPE of TABLE) 2))) [GSB ←(SETUP TABLE (QUOTE ROWMAJOR) (CONSTANT (create GENSTATEBLOCK] declare (TELT SCALAR) (I INTEGER) (TTYPE INTEGER) (GSB GENSTATEBLOCK) until (fetch DONE of GSB) do (SETQ TELT (GETAELT TABLE (NEXT GSB))) (SELECTQ TTYPE (1 (add I 1) (AND (UEQP S TELT) (RETURN I))) (2 (if (UEQP S TELT) then (RETURN (COPYAELT TABLE (NEXT GSB))) else (SKIP GSB 1))) [3 (if S then [if TELT then [if (GREATERP TELT S) then (SKIP GSB 2) elseif (AND (SETQ TELT (GETAELT TABLE (NEXT GSB))) (GREATERP S TELT)) then (SKIP GSB 1) else (RETURN (COPYAELT TABLE (NEXT GSB] elseif (OR [NULL (SETQ TELT (GETAELT TABLE (NEXT GSB] (GREATERP S TELT)) then (SKIP GSB 1) else (RETURN (COPYAELT TABLE (NEXT GSB] elseif TELT then (SKIP GSB 2) elseif (GETAELT TABLE (NEXT GSB)) then (SKIP GSB 1) else (RETURN (COPYAELT TABLE (NEXT GSB] (UERROR "Invalid size translation table")) finally (RETURN (OR DEFAULT (AND (ILESSP TRANSLATENARGS 3) S))) (* Default is DEFAULT if there is one, else S) (* If no translation found) )]] (QUOTE (SCALAR MATRIX SCALAR)) (ARG TRANSLATENARGS 1) (ARG TRANSLATENARGS 2) (AND (IGREATERP TRANSLATENARGS 2) (ARG TRANSLATENARGS 3]) ) (PUTPROPS TRANSLATE ARGNAMES (NIL (S TABLE DEFAULT) . TRANSLATENARGS)) (RPAQQ E 2.718282) (RPAQQ PI 3.141594) (DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDTOVAR NLAMA ) (ADDTOVAR NLAML ) (ADDTOVAR LAMA TRANSLATE) ) (PUTPROPS ARITHMETIC COPYRIGHT ("Xerox Corporation" 1983 1984 1985)) (DECLARE: DONTCOPY (FILEMAP (NIL (751 5785 (PLUSP 761 . 1040) (ROUND 1042 . 1456) (SAME 1458 . 1740) (SCALARP 1742 . 2055 ) (TRANSLATE 2057 . 5783))))) STOP