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について書く。