1 package gnu.jemacs.lang; 2 import gnu.math.*; 3 import gnu.mapping.*; 4 5 public class DivideOp extends ProcedureN 6 { 7 public DivideOp(String name) 8 { 9 setName(name); 10 } 11 12 public static final DivideOp $Sl = new DivideOp("/"); 13 14 public static Object $Sl(Object arg1) 15 { 16 return $Sl(IntNum.one(), arg1); 17 } 18 19 public static Object $Sl(Object arg1, Object arg2) 20 { 21 Numeric num1 = ELisp.asNumber(arg1); 22 Numeric num2 = ELisp.asNumber(arg2); 23 if (num1 instanceof IntNum && num2 instanceof IntNum) 24 return IntNum.quotient((IntNum) num1, (IntNum) num2, Numeric.TRUNCATE); 25 return num1.div(num2); 26 } 27 28 public static Object $Sl$V (Object arg1, Object arg2, 29 Object arg3, Object [] rest) 30 { 31 return applyN($Sl($Sl(arg1, arg2), arg3), rest); 32 } 33 34 public static Object applyN(Object init, Object [] args) 35 { 36 int len = args.length; 37 Object result = init; 38 for (int i = 0; i < len; i++) 39 result = $Sl(result, args[i]); 40 return result; 41 } 42 43 public Object applyN (Object [] args) 44 { 45 int len = args.length; 46 if (len <= 1) 47 return $Sl(args[0]); 48 Object result = args[0]; 49 for (int i = 1; i < len; i++) 50 result = $Sl(result, args[i]); 51 return result; 52 } 53 } 54 | Popular Tags |