括弧ゴルフに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;