括弧ゴルフにPureで挑んでみた

「どれだけ括弧を使わずに書けるか」を競う「括弧ゴルフに、Pureを使って挑戦してみました。

括弧は、「()」も「[]」も全く出てきません。0個です。

階乗は大きい数(intだとオーバーフローしてしまうもの)も普通に出てくるので、それに対応するのに苦労しました。

「$」を使ったり、一行にまとめるのではなくwhenを使ってローカル変数を使ったりしたので、普通はこんな書き方はしないと思います。

Pureには「実は演算子として実装されている」というものが多いので、うまく使えばいろいろな書き方ができそうです。

多分、もう少し綺麗な書き方ができたと思います。

using system;

limit = flip sscanf "%d" $ argv!1 if argc == 2;
limit = 1 if argc == 1;
limit = throw invalid_argument otherwise;

fact 0L = 1L;
fact n = n * fact x when
  x = n - 1L;
end;

__show__ x::bigint = init $ str x;

p x = printf "%s! = %s\n" $ a, b when
  a = str x;
  b = str $ fact x;
end;

do p $ 1..limit;