StoryEdit 開発日誌

ウェブアプリ StoryEditを作ってましたが延期。普通のブログ。

Erlang試す

Erlangを触ってみた。とりあえず難解。

http://www.erlang.org/course/course.html
から、まずはSequential programmingについて。

関数定義

まずはともあれ、関数を定義する。

add(X) 
 -> X + 1.

まず、ドットがややこしい。ブロックの終わりにはドットをいれる。関数が複数行になるときは、カンマで接続していく。

add_and_sub(X)
  -> Y = X + 1,
     Z = Y - 2.

型はまだ宣言しなくていい。型なしでも、ダイナミックでもなく、推論される。

パターンマッチング

erlangには、forとかwhileがない、らしい。そのかわり再帰でかく。では終了条件をどうかくか。
ここで威力を発揮するのが、パターンマッチング。その名の通り、パターン(特定の条件)がマッチしたら、そちらをつかう、という感じ。
以下、引数Xから0までを掛け合わせる、factorial関数を書く。

factorial(0)
 -> 1;
factorial(X)
 -> X * factorial(X-1).

うむ。なるほど。直感的である。factorial関数が、0をもらったら1を返して、それ以外は、x * facto(x-1)を返せってことですね。まるで、数学の定義のように直感的にかけちゃうのが、特徴。ifとか使うのは、やはり手続き的だもの。しかし、手続き的な制約で、factorial(0)は、factorial(x)よりも前に書かないと正しく動作しない。笑 
記述として、パターンマッチが続く場合は、セミコロンを使う模様。

変数

いい忘れたが、記述にいくつかの制約がある。

  • 変数は大文字から始めるべし
  • 関数名にハイフンは用いるべからず


とりあえず、こんなところ。次はGuardについて書く。