7つの世界』(オーム社)の第6章で紹介されているErlangです。Erlanghttp://www.erlang.org/この第6章のErlangからこの本では、第7章のClojure、第8章のHaskellと関数型言語が続きます。先のエントリで紹介した第5章のScalaもあわせると7つのうち、関数型言語に4つも割かれています。著者のの関数型言語への関心の高さと関数型言語に対する注目の高さが伺えます。Languageの略で、その名前にあるとおり、Ericsson社が開発した関数型言語です。Prologをベースに開発されました。耐障害性と並行性が大きな売りになっているようで、Erlangの「プロセス」が大きくそれに貢献しているようです。LionへのインストールはHomebrewを使用しました。2012年6月12日時点でバージョンはR15B01です。2.Hello,Worldターミナルで「erl」と打つとErlangのシェルが起動します。最初、これが分からず難儀しました。q().ok$[/erlang]基本的な書き方ですが、行末は必ずピリオド(.)をつける。“1”[/erlang]3.変数とアトム(シンボル)変数は大文字で始まる文字列で定義します。小文字で始まる文字列は後述する「アトム」というシンボルを表すため、変数として使えません。1[/erlang]Scalaは変更不可能な変数と変更可能な変数を選ぶことができましたが、Erlangでは変更不可能な変数しか定義することができません。2[/erlang]小文字で始まる文字列で「アトム」というシンボルを表します。Rubyでいうところのコロン(:)をつけた例えば”:name”、”:price”みたいなものです。シングルクォーテーション(’)で囲うと大文字から始まる文字列もアトムとして扱われるようです。シングルクォーテーション(’)とダブルクオーテーション(“)のどちらで囲っても文字列として扱われるRubyに慣れていると少し戸惑います。リストとタプルErlangには、Prologと同じようにリストとタプルという配列が用意されています。}で囲われた固定長の配列です。Prologではタプルを()で囲うところが違いますね。[erlang]10>%リスト10>[1,2,3,4,5][1,2,3,4,5][/erlang]Erlangは文字列を実はリストとして扱っています。そのため、以下のような整数のリストから文字列を返してくる。[72,101,108,108,111,44,87,111,114,108,100].“Hello,World”[/erlang]ちなみに上の数字はそれぞれASCIIコードです。日本語対応していない処理系を使用すると英数字以外を入力するとそのままリストで返されてしまいます。以下はユニコード表の数字ですね。タプルとパターンマッチErlangにはRubyでいうハッシュのようなものがないようですが、タプルで以下のように書くことができます。book、title、author、publisherはアトムでハッシュでいうところのキーとして使用しています。Akira”},{publisher,”Syueisya”}}[/erlang]上のタプルをBookという変数に代入します。Ball”等の文字列を入れていたところを変数に置き換えたタプルに上のタプルを変数Bookを経由して代入させます。Akira”},{publisher,”Syueisya”}}[/erlang]するとデータ構造でマッチさせることで、それぞれの変数にそれぞれの値が代入され、以下のように取り出すことができます。関数テキストエディタで以下のように「test.erl」というerlという拡張子を持つファイルを作成します。[erlang]%-moduleでモジュール名(この場合はtest.erlの拡張子を取り除いたもの)を定義。A[/erlang]Erlangシェルを起動して「test.erl」をコンパイルします。c(test).{ok,test}[/erlang]コンパイル後にtestモジュールのprint関数が利用できるようになります。無名関数funという関数で無名関数、つまり名前のない関数を定義できます。end.#Fun[/erlang]この無名関数を変数に代入できます。関数を引数として受け取ったり、戻り値として返す高階関数。関数を戻り値として返すというのはこういうことでしょうか。end.#Fun[/erlang]関数を引数として受け取る。下ではまずTestというリストを作成し、リストの要素を順番にPrint関数に引数として渡しています。戻り値もそのままリストになってしまうので分かりづらいですが、”Hello”、”World”、”Erlang”という戻り値が返ってきてます。7つの世界』第5章)関数型プログラミング言語でLisp方言の1つのClojureを触ってみました。09:16ソフトバンクの通信障害で交換機の内部にErlangが使われているということでこの記事を見つけました。関数型言語も実際に使ったこともなかったので、。最後に1つ誤植らしきものがあるので報告させていただきます。3章の「Scalaは変数不可能な変数と変更可能な変数」→「Scalaは変更不可能な」ではないでしょうか。10:46お読みいただきありがとうございます!また、ご指摘いただきありがとうございました。ご指摘のとおり、誤植ですので、修正しました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。