Re:Start

いまはディレクターやってます

基本的な定義や文法等

learn you some erlangを始めました。
1と2は言語の説明的なところが多いので、いよいよ処理を始めるのは3からとなりますます、
http://www.ymotongpoo.com/works/lyse-ja/ja/03_starting_out_for_real.html

基本的な所

  • 変数名 → 大文字から始める
  • 変数のクリア → (シェル上のみ) f(変数名) または、f()で全設定のクリア。
  • アトム → 小文字から始める、そのままその文言を持つ。小文字以外から始める場合はシングルクォートで囲む。アンダーバーは使える。※ただし、アトムはGCの対象外なので不必要に作りすぎない事。そのまんまやしー。
  • ブール
1> true and false.
false
2> false or true.
true
3> true xor false.
true
4> not false.
true
5> not (true and true).
false
6> true andalso true.
true
7> true andalso false.
false
8> true orelse false.
true
9> false orelse false.
false

続いて演算子

  • 以上と以下がわかりにくい。 =:=と==の違いがもどかしいのと、=/=で同じでないというのが斬新過ぎて忘れそう。
15> 5 =:= 5.
true
16> 10000 =:= 0.
false
17> 1 =/= 100.
true
18> 100 =/= 100.
false
19> 5 =:= 5.000.
false
20> 5 == 5.00000.
true
21> 10 < 10.
false
22> 10 <= 15.
* 1: syntax error before: '<='
22> 10 =< 15.
true
23> 10 >= 15.
false
  • 型変換には厳しいけど、比較はできるようになっている。

number < atom < reference < fun < port < pid < tuple < list < bit string

配列とかリスト

  • タプル {}で囲む。配列のようなもの。
  • リスト []で囲む。
  • Erlangはリストの中の数字の内、1つでも文字として表示できないものがあると、数字のリストとして数字を表示する (なんだってー)→改善されてきてるらしい。
  • リストの頭をhead、残りをtailとする。[Head|Tail]と区切って定義することもできるし、内包リストをいくらでも定義することができる。ただし、[1|2]のような形にすると、リストの最後が空でない=リストでないとみなされるのでエラーになるから注意。

代入

  • <- でいわゆる代入になる。
  • 配列は途中で値がないとエラーになるらしい。
  • もっと複雑な値にして、パターンマッチとかさせるととても楽。こりゃ確かにMapReduceに向いているかもしれないな。すごく数学を思い出してdkdkする。
35> [2*N || N <- [3,15,7,9]].
[6,30,14,18]
36> [X || X <- [1,2,3,432,45,65,434342342,4,,0], X rem 3 =:= 0].
* 1: syntax error before: ','
36> [X || X <- [1,2,3,432,45,65,434342342,4,0,0], X rem 3 =:= 0].
[3,432,45,0,0]

その他

  • バイナリ処理は得意
  • Erlangは重いデータを数値処理するのには向いてない
  • アトムはどんなに長くても4バイトあるいは8バイトしか使わない
  • アトムを使うことによって、関数から関数にデータをコピーするとき、あるいは他のサーバ上にある他のErlangノードにデータを転送するときにオーバーヘッドなく処理できる。ただし、文字列は分割や正規表現などの操作ができるが、アトムは比較しかできないので注意。