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