KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gnu > jemacs > lang > AddOp


1 package gnu.jemacs.lang;
2 import gnu.math.*;
3 import gnu.mapping.*;
4
5 public class AddOp extends ProcedureN
6 {
7   int plusOrMinus = 1;
8
9   public AddOp(String JavaDoc name, int plusOrMinus)
10   {
11     setName(name);
12     this.plusOrMinus = plusOrMinus;
13   }
14
15   public static final AddOp $Pl = new AddOp("+", 1);
16   public static final AddOp $Mn = new AddOp("-", -1);
17
18   public static Object JavaDoc apply2(int plusOrMinus, Object JavaDoc arg1, Object JavaDoc arg2)
19   {
20     Numeric num1 = ELisp.asNumber(arg1);
21     Numeric num2 = ELisp.asNumber(arg2);
22     return num1.add(num2, plusOrMinus);
23   }
24
25   public static Object JavaDoc $Pl(Object JavaDoc arg1, Object JavaDoc arg2)
26   {
27     return apply2(1, arg1, arg2);
28   }
29
30   public static Object JavaDoc $Mn(Object JavaDoc arg1, Object JavaDoc arg2)
31   {
32     return apply2(-1, arg1, arg2);
33   }
34
35   public static Object JavaDoc $Mn(Object JavaDoc arg1)
36   {
37     return ELisp.asNumber(arg1).neg();
38   }
39
40   public static Object JavaDoc $Pl$V (Object JavaDoc arg1, Object JavaDoc arg2,
41                    Object JavaDoc arg3, Object JavaDoc[] rest)
42   {
43     return applyN(1, apply2(1,apply2(1, arg1, arg2), arg3), rest);
44   }
45
46   public static Object JavaDoc $Mn$V (Object JavaDoc arg1, Object JavaDoc arg2,
47                    Object JavaDoc arg3, Object JavaDoc[] rest)
48   {
49     return applyN(-1, apply2(-1,apply2(-1, arg1, arg2), arg3), rest);
50   }
51
52   public static Object JavaDoc applyN(int plusOrMinus, Object JavaDoc[] args)
53   {
54     int len = args.length;
55     if (len == 0)
56       return IntNum.zero ();
57     Object JavaDoc result = args[0];
58     if (len == 1 && plusOrMinus < 0)
59       return $Mn(result);
60     for (int i = 1; i < len; i++)
61       result = apply2(plusOrMinus, result, args[i]);
62     return result;
63   }
64
65   public static Object JavaDoc applyN(int plusOrMinus, Object JavaDoc init, Object JavaDoc[] args)
66   {
67     int len = args.length;
68     Object JavaDoc result = init;
69     for (int i = 0; i < len; i++)
70       result = apply2(plusOrMinus, result, args[i]);
71     return result;
72   }
73
74   public Object JavaDoc applyN (Object JavaDoc[] args)
75   {
76     return applyN(plusOrMinus, args);
77   }
78 }
79
Popular Tags