[BACK]Return to trip3.k CVS log [TXT][DIR] Up to [local] / OpenXM / src / k097 / debug

Annotation of OpenXM/src/k097/debug/trip3.k, Revision 1.1.1.1

1.1       maekawa     1: /* trip3.k  to test new.  1997, 4/8 */
                      2: class Object extends PrimitiveObject {
                      3:   def new0() {
                      4:     return(Object);
                      5:   }
                      6: }
                      7:
                      8: class Complex extends Object {
                      9:   local re,im;
                     10:   def new0(a,b) {
                     11:     this = new();  /* or this = new(super.new0()); */
                     12:     re = a;
                     13:     im = b;
                     14:     return(this);
                     15:   }
                     16:   def void show() {
                     17:     Print(re); Print(" + "); Println(im);
                     18:   }
                     19:   def void showln() {
                     20:     this.show(); Ln();
                     21:   }
                     22:
                     23: }
                     24:
                     25: class Complex2 extends Complex {
                     26:   local abs;
                     27:   def new0(a,b) {
                     28:     this = new(super.new0(a,b));
                     29:     abs = a*a+b*b;
                     30:     return(this);
                     31:   }
                     32: }
                     33:
                     34: class Integer extends Object {
                     35:    local ival;
                     36:    def new0(i) {
                     37:       this = new();
                     38:       ival = i;
                     39:       return(this);
                     40:    }
                     41:    one = Integer.new0(1);
                     42:    def operator sub(b) {
                     43:      local this2,ans;
                     44:      this2 = this;
                     45:      ans = Integer.new0(0);
                     46:      ans[1] = this2[1]-b[1];
                     47:      return(ans);
                     48:    }
                     49:   def operator mul(b) {
                     50:      local this2, ans;
                     51:      this2 = this;
                     52:      ans = Integer.new0(0);
                     53:      ans[1] = this2[1]*b[1];
                     54:      return(ans);
                     55:   }
                     56:   def isEqual(b) {
                     57:     local this2;
                     58:     this2 = this;
                     59:     if (this2[1] == b[1]) return(true);
                     60:     else return(false);
                     61:   }
                     62:   def factorial() {
                     63:     local this2,tmp;
                     64:     this2 = this;
                     65:     if (this.isEqual(one)) return( one );
                     66:     tmp = this2 - one;
                     67:     return( (tmp.factorial())* this2 );
                     68:   }
                     69:   /*  100 の階乗は,
                     70:     In[12]= a=Integer.new0(100);
                     71:     In[13]=sm1(" set_timer "); a.factorial(); sm1(" set_timer ");
                     72:     In[14]=In[15]=User time: 6.850000 seconds, System time: 0.100000 seconds
                     73:   */
                     74:   def void show() {
                     75:     Print(ival);
                     76:   }
                     77:   def void showln() {
                     78:     this.show(); Ln();
                     79:   }
                     80: }
                     81:
                     82:
                     83: def factorial(a) {
                     84:   if (a == 1) return(1);
                     85:   return( a*factorial(a-1) );
                     86: }
                     87: /*
                     88: In[19]=sm1(" set_timer "); factorial(100); sm1(" set_timer ");
                     89: In[20]=In[21]=User time: 0.716667 seconds, System time: 0.000000 seconds
                     90: 10 倍遅い.  On SS465.
                     91: sm1 の native mode でやるとどのくらいの早さか?
                     92: */
                     93:
                     94:
                     95:
                     96: /* Mathematica でやると,,,,
                     97:
                     98:  factorial[a_]:=Module[{},
                     99:          If[a == 1,Return[1]];
                    100:          Return[a*factorial[a-1]]]
                    101:
                    102:
                    103:  $RecursionLimit = Infinity
                    104:
                    105:  Timing[factorial[100]]
                    106:
                    107: Out[8]= {0.1 Second, 93326215443944152681699238856266700490715968264381621468\
                    108:
                    109: >     59296389521759999322991560894146397615651828625369792082722375825118521\
                    110:
                    111: >     0916864000000000000000000000000
                    112:
                    113: 0.1 秒であった.  On SS5.
                    114:
                    115: */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>