美少女が教える本当にきれいなプログラムの書き方
ʕ•͡ω•ʔ 最近はあまり刺激を受けるようなことが無いので、書くこともあまりない
おお、そうだ。UniScript のことは?
uni という(架空の)テキストエディタのグルー言語なんだ。
というか、vim というテキストエディタを?
それのグルー言語である VimScript があまりよくないのでそのパロディの uni と UniScript を考えたんだ。
やっぱりグルー言語といえば、ALGOL 風じゃないとね。
でも、マジ ALGOL 風というのはあんまりよくない。
Ruby っぽければいいんじゃないかな。
UniScript のサンプルコードをいくつか示してみよう:
if even? 5 then [ 1, 2, "foo" ] else [ 1, 2, "bar" ] end
えーっと、なんていうか、5
が偶数なら [1, 2, "foo"]
を返し、それ以外なら [1, 2, "bar"]
を返すコードだ。
わぁお! 丸っきり Ruby じゃないか。
そうなんだ。まだ UniScript っぽさが自分でもわかっていない。
こいつはどうだろう?:
lambda (x, y) x + y end
なんだこりゃ。
まあ、その…UniScript では括弧のない Lisp をちょっとだけイメージしてみた。
そういうことなので、ブロック文は UniScript ではナシだ。
普通はこういう lambda
式を関数に渡していく。
今度は階乗を計算する関数を定義してみよう:
defn factorial (n) if n <= 1 then 1 else n * factorial (n - 1) end end
うん、Wikipedia のプログラミング言語の記事に出てくるとても素直なコードだ。
実際 LISP という記事のサンプルコードを参考にさせていただいている。
UniScript で末尾再帰が最適化されるかどうかはわからないけれど以下のように書くと多分上記のコードよりも高速だ:
defn factorial (n, acc = 1) if n <= 1 then acc else factorial (n - 1) (acc * n) end end
……と思う。多分。