たらい回し関数(竹内関数)

ふつケルで載ってました。
スゲーぞ、Haskell。引数渡しで評価してないからできるのか〜。
http://www.loveruby.net/d/20030315.html#p03
http://blog.livedoor.jp/dankogai/archives/50447103.html
ちなみにVDM++で書いてみた。

 -- たらいまわし関数
class tarai

functions
public static main: () -> int
main() == tarai(20, 10, 5);

public static tarai: int * int * int -> int
tarai(x, y, z) ==
	if x <= y
		then y
		else tarai(
			tarai( (x-1), y, z),
			tarai( (y-1), z, x),
			tarai( (z-1), x, y));

end tarai

試してみると、2時間動かしても返ってこなかった。orz