ALGOL68 : たらいまわし関数

そういえば、ALGOLは遅延言語だったっけ、ということで、ALGOLでたらいまわし関数を書いてみる。
Algol 68のインタプリタを見つけたので、それを使ってみることに。
http://www.xs4all.nl/~jmvdveer/algol68g-mk8.1/doc/introduction.html

PROC tarai = (INT x, INT y, INT z) INT:
   IF x <= y THEN y
             ELSE tarai ((tarai ((x-1), y, z))
                        ,(tarai ((y-1), z, x))
                        ,(tarai ((z-1), x, y))) FI;

print (tarai (10, 5, 0))

結果。

$ time a68g test.a68
        +10

real    0m1.630s
user    0m0.030s
sys     0m0.030s

あれ、あまり速くないぞ。しかも、「tarai (12,6,0)」では返ってこない。
なんか、使い方を間違ってるのかなぁ。

      • -

あ、メモしないからダメなのか。