fortran66のブログ

fortran について書きます。

メモ帳 oberon & javascript

Oberon で分割数計算

Oberonは何故かロシアで人気があったようです。
[追記 H29/8/22]
link.springer.com


ロシア製 Oberon → javascript 変換機
Oberon online compiler
出力がイマイチ? JS.alert しかない?


Fortran 90 出始めの頃や、ELF90 や F で命令を大文字で書く習慣があったのは、 MODULA-2 や Oberon の影響だったのではという気がしてきました。もっとも、Fortran 2003 までは小文字は使ってもいいけど、処理系が必ずしも用意する必要もないということだったらしいので、それが理由だという説もありますが。

MODULE test;
IMPORT JS;
VAR i: INTEGER;

PROCEDURE part(n, m:INTEGER): INTEGER;
VAR res: INTEGER;
BEGIN  
  IF n = 1 THEN 
   res := 1 
  ELSIF m = 1 THEN 
   res := 1
  ELSIF n < 0 THEN 
   res := 0 
  ELSIF m < 0 THEN 
   res := 0 
  ELSE
   res := part(n - m, m) + part(n, m - 1)
  END;
  RETURN res
END part;

PROCEDURE partition(n :INTEGER): INTEGER;
BEGIN  
  RETURN part(n, n)
END partition;
 
BEGIN
 i := 0;
 WHILE i < 10 DO
    i := i + 1;
   JS.alert(partition (i));
 END
END test.

javascript で分割数計算

var pp = function (n, m) {
  if (n == 0) {return 1};
  if (m == 1) {return 1};
  if (n <= 0) {return 0};
  if (m <= 0) {return 0};
  return pp(n - m, m) + pp(n, m - 1);
}

var partition = function (n) { return pp(n, n) };

for(i = 1; i < 11; i++) {
  console.log(partition(i));
};
1 
2 
3 
5 
7 
11 
15 
22 
30 
42 
undefined