読者です 読者をやめる 読者になる 読者になる

美少女が教える本当にきれいなプログラムの書き方

ʕ•͡ω•ʔ 最近はあまり刺激を受けるようなことが無いので、書くこともあまりない

おお、そうだ。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

……と思う。多分。