バリケンのErlang日記 RSSフィード

2009-12-29

[] 作業中のディレクトリの確認と移動 17:37  作業中のディレクトリの確認と移動 - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  作業中のディレクトリの確認と移動 - バリケンのErlang日記  作業中のディレクトリの確認と移動 - バリケンのErlang日記 のブックマークコメント

Erlangシェルで、いまどのディレクトリで作業しているかを確認するには「pwd().」を使うよ。

Erlang R13B03 (erts-5.7.4) [smp:2:2] [rq:2] [async-threads:0]

Eshell V5.7.4  (abort with ^G)
1> pwd().
C:/Program Files/erl5.7.4/usr
ok
2> 

作業中のディレクトリを変更したいときは、「cd("移動したいディレクトリ").」とするよ。パス区切りはスラッシュ「/」を使ってね。絶対パス相対パスどちらでも移動できるみたいだよ。

2> cd("..").
C:/Program Files/erl5.7.4
ok
3> cd("c:/").
c:/
ok
4> 
トラックバック - http://erlang.g.hatena.ne.jp/muscovyduck/20091229

2009-06-21

[] リスト 21:58  リスト - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  リスト - バリケンのErlang日記  リスト - バリケンのErlang日記 のブックマークコメント

PythonのリストHaskellのリスト同様、Erlangにもリストがあるよ。リストは、値をカンマで区切って「[ ]」で囲むよ。

1> Channels = [1, 3, 4, 6, 8, 10, 12].
[1,3,4,6,8,10,12]
2> 

Erlangのリストはタプル同様、インデックスを指定して取り出すことはできないよ。リストの場合は[変数1|変数2]という形でパターン照合することで、変数1にリストの先頭要素が、変数2に先頭要素を除いた残りのリストが束縛されるよ。

2> [C1|Channels2] = Channels.
[1,3,4,6,8,10,12]
3> C1.
1
4> Channels2.
[3,4,6,8,10,12]
5> 

先頭2つ分の要素を取り出したいときは、カンマで区切って2つの変数を指定すればいいみたいだよ。

5> [C2, C3|Channels3] = Channels2.
[3,4,6,8,10,12]
6> C2.
3
7> C3.
4
8> Channels3.
[6,8,10,12]
9> 

[] 文字列 22:09  文字列 - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  文字列 - バリケンのErlang日記  文字列 - バリケンのErlang日記 のブックマークコメント

Erlang文字列は、実は「整数のリスト」なんだって。整数のリストがLatin-1 (ISO-8859-1)の範囲内のみで構成されているとき、画面上には文字列として表示されるみたいだよ。

1> Name = [72, 101, 108, 108, 111].
"Hello"
2> 

文字に対応する整数を知りたいときは、$記号を使うよ。

2> $H.
72
3> $e.
101
4> $l.
108
5> $o.
111
6> 
トラックバック - http://erlang.g.hatena.ne.jp/muscovyduck/20090621

2009-06-20

[] タプルから値を取り出す 14:00  タプルから値を取り出す - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  タプルから値を取り出す - バリケンのErlang日記  タプルから値を取り出す - バリケンのErlang日記 のブックマークコメント

昨日勉強した「タプル」から値を取り出したいときは、Pythonのタプルようにインデックスで取り出すことはできないから、次のようにするよ。ちょっと多重代入のような感じだね。

1> Today = {2009, 6, 20}.
{2009,6,20}
2> {Year, Month, Date} = Today.
{2009,6,20}
3> Year.
2009
4> Month.
6
5> Date.
20
6>

[] f()関数変数束縛を解消する 14:00  f()関数で変数束縛を解消する - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  f()関数で変数束縛を解消する - バリケンのErlang日記  f()関数で変数束縛を解消する - バリケンのErlang日記 のブックマークコメント

変数の束縛関係をすべて忘れるには、f()関数を使うよ。ためしに、さっきの変数束縛を解消してみるよ。

6> f(). 
ok
7> Today.
* 1: variable 'Today' is unbound
8> Year.
* 1: variable 'Year' is unbound
9> Month.
* 1: variable 'Month' is unbound
10> Date.
* 1: variable 'Date' is unbound
11> 

[] 無名変数「_」 14:00  無名変数「_」 - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  無名変数「_」 - バリケンのErlang日記  無名変数「_」 - バリケンのErlang日記 のブックマークコメント

タプルから値を取り出すときに、とくに取り出す必要のない値にまで変数を束縛させたくないときは、無名変数「_」を使うよ。

11> Today = {2009, 6, 20}.
{2009,6,20}
12> {_, Month, _} = Today.      
{2009,6,20}
13> Month.
6
14> 

Erlangの無名変数「_」は、Haskellのワイルドカードと同じようなものだね。

2009-06-19

[] アトム 22:55  アトム - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  アトム - バリケンのErlang日記  アトム - バリケンのErlang日記 のブックマークコメント

アトムとは、Rubyのシンボルのようなものだよ。

アトムは英小文字で始めて、英数字やアンダースコア「_」やアットマーク「@」を続けて書いたものになるよ。そしてアトムを評価するとアトムが返るよ。

1> atom.
atom
2> a_.
a_
3> a@@.
a@@
4> 

実は英大文字で始まるアトムや、空白を含んだアトム、アンダースコアやアットマーク以外の記号も含んだアトムを作ることもできるよ。その場合はシングルクォート「'」で囲んでね。

4> 'Hello'.
'Hello'
5> '2 + 3'.
'2 + 3'
6> 'Yes, we can.'.
'Yes, we can.'
7> 

シングルクォート自身を含むアトムを作りたい場合は、シングルクォートを「\'」で表してね。あと、バックスラッシュ「\」を含むアトムを作りたい場合は「\\」と表現してね(環境によっては「\」が「円記号」に見えるかもしれないけど、「バックスラッシュ」だと思ってね)。

7> 'I don\'t know.'.
'I don\'t know.'
8> '\\(^o^)/'.
'\\(^o^)/'
9> 

[] タプル 23:33  タプル - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  タプル - バリケンのErlang日記  タプル - バリケンのErlang日記 のブックマークコメント

Pythonを勉強したときHaskellを勉強したときにも出てきたけど、タプルは「複数の値をまとめて一つの値にしたもの」だったよね。

Erlangでタプルを表現するには、値をカンマで区切って、「{}」で囲むよ。

1> {2, 3}.
{2,3}
2>

タプルの中にタプルを入れることもできるよ。

2> {2, {3, 5}}.
{2,{3,5}}
3>

タプルは「無名の構造体」のようなものだけど、そのタプルが何を意味するのかを分かりやすくするために、タプルの最初の要素に「そのタプルが何を意味しているか」をアトムを使って表現しておくのがErlang流、みたいだよ。

3> {user, {name, muscovyduck}, {password, hogehoge}}.             
{user,{name,muscovyduck},{password,hogehoge}}
4>

トラックバック - http://erlang.g.hatena.ne.jp/muscovyduck/20090619

2009-03-05

[] 式を評価する 22:35  式を評価する - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  式を評価する - バリケンのErlang日記  式を評価する - バリケンのErlang日記 のブックマークコメント

Erlangシェルで式を入力して、最後にピリオド「.」を入力してEnterキーを押せば、その式が評価されて結果が表示されるよ。

1> 2 + 3.
5
2>

[] コメント 22:35  コメント - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  コメント - バリケンのErlang日記  コメント - バリケンのErlang日記 のブックマークコメント

「%」で始まる行はコメントとみなされるみたいだよ。

2> % hoge
2>

式の最後にコメントを書くこともできるみたい。

2> 2 + 3. % hoge
5
3> % hoge
3> 

あれ、式の評価結果に続いてもう一度「% hoge」って出てくるのはなんでだろ?

[] 16進数表現 22:43  16進数表現 - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  16進数表現 - バリケンのErlang日記  16進数表現 - バリケンのErlang日記 のブックマークコメント

「16#」のあとに16進数表記をすれば、その数に対応する10進数の数になるみたいだよ。

3> 16#ff.
255
4> 

「32#」とすれば32進数表記もできるみたい。

[] 演算子の優先順位 22:43  演算子の優先順位 - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  演算子の優先順位 - バリケンのErlang日記  演算子の優先順位 - バリケンのErlang日記 のブックマークコメント

演算子には優先順位があるみたいだよ。たとえば「*」や「/」は「+」や「-」よりも優先順位が高いよ。次のように書くと、先に「4 * 5」が計算されるよ。

4> 3 + 4 * 5.
23
5> 

カッコを使えば計算の順序を変えることができるよ。

5> (3 + 4) * 5.
35
6> 

[] 変数 22:53  変数 - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  変数 - バリケンのErlang日記  変数 - バリケンのErlang日記 のブックマークコメント

変数に値を代入するには「変数名 = 値.」とするみたい。代入も式だから、最後に「.」をつけるのを忘れないでね。あとErlang変数は大文字で始めないといけないみたいだよ。

6> X = 5.
5
7> X.
5
8> 7 + X.
12
9>

Erlang変数は単一代入変数だから、再代入はできないみたい。

9> X = 9.
** exception error: no match of right hand side value 9
10> 

そうそう、「変数とは値を入れる箱じゃなくて、値に名前をつけているだけ」だったよね。

[] 浮動小数点数 23:36  浮動小数点数 - バリケンのErlang日記 を含むブックマーク はてなブックマーク -  浮動小数点数 - バリケンのErlang日記  浮動小数点数 - バリケンのErlang日記 のブックマークコメント

演算子「/」は常に浮動小数点数を返すみたいだよ。

10> 7 / 4.
1.75
11> 10 / 5.
2.0
12>

ちなみに整数の割り算をしたいときは、「div」で商、「rem」で剰余を求めることができるよ。

12> 8 div 5.
1
13> 8 rem 5.
3
14> 
トラックバック - http://erlang.g.hatena.ne.jp/muscovyduck/20090305