Skip to content

Instantly share code, notes, and snippets.

@yteraoka
Last active January 4, 2016 10:58
Show Gist options
  • Save yteraoka/8611856 to your computer and use it in GitHub Desktop.
Save yteraoka/8611856 to your computer and use it in GitHub Desktop.

Erlang メモ

飛行機本 を読みながらのメモ

install

$ sudo apt-get install xsltproc fop libssl-dev
$ sudo apt-get install openjdk-7-jdk unixodbc-dev
$ curl -O http://download.basho.co.jp.cs-ap-e1.ycloud.jp/otp/download/otp_src_R16B03.tar.gz
$ tar xvf otp_src_R16B03.tar.gz
$ cd otp_src_R16B03
$ ./configure --enable-m64-build --disable-hipe --enable-dtrace

文法?

  • 式の終わりは "."
  • 変数名は大文字で始まらなければならない
  • = はパターン照合処理 (代入ではない)
  • 定数 = アトム
  • アトムは小文字で始まり、数字, "_", "@" が使える
  • ' で囲めば大文字でも始められるし、スペースや +, * などの記号も使える
  • _ は無名変数、捨てるために使う。特定の値に bind されない
  • タプルは構造体とかハッシュみたいなもの
Person = {person,{name,{first,joe},{last,armstrong}},{footsize,42}}.
  • リスト [, ] 内にカンマ区切りでなんでも
1> ThingsToBuy = [{apples,10},{pears,6},{milk,3}].
[{apples,10},{pears,6},{milk,3}]
2> [1+7,hello,2-2,{cost, apple, 30-20},3].
[8,hello,0,{cost,apple,10},3]
  • 文字列(Latin-1)は " で囲む。 ' ではダメ(厳密には Erlang に文字列型は無く数値のリスト)

リスト

[H|T]
H: Head
T: Tail
1> List1 = [aaa, bbb, ccc].
[aaa,bbb,ccc]
2> [A, _, _] = List1.
[aaa,bbb,ccc]
3> A.
aaa
4> [A, bbb, ccc] = List1.
[aaa,bbb,ccc]
5> 

文字列

文字列は数値のリストが全て表示可能範囲にあるかどうかだけ

1> [1,2,3].
[1,2,3]
2> [83,117,114,112,114,105,115,101].
"Surprise"
3> [1,83,117,114,112,114,105,115,101].
[1,83,117,114,112,114,105,115,101]
4> [72,229,107,97,110].
"Håkan"

ある文字を数字で表すのに、この文字の数字はいくつかな?という場合は $ が使える

1> $a.
97
2> $A.
65
3> $z.
122
4> $Z.
90
5>

パターン照合

パターン 結果
{X,abc} {123,abc} 成功 X → 123
{X,Y,Z} {222,def,"cat"} 成功 X → 222, Y → def, Z → "cat"
{X,Y} {333,ghi,"cat"} 失敗 - タプルの形が違う
X true 成功 X → true
{X,Y,X} {{abc,12},42,{abc,12}} 成功 X → {abc,12}, Y → 42
{X,Y,X} {{abc,12},42,true} 失敗 - X を同時に {abc,12} かつ true にすることはできない
[H|T] [1,2,3,4,5] 成功 H → 1, T → [2,3,4,5]
[H|T] "cat" 成功 H → 99, T → "at"
[A,B,C|T] [a,b,c,d,e,f] 成功 A → a, B → b, C → c, T → [d,e,f]

リスト内包表記

1> L = [1,2,3,4,5].
[1,2,3,4,5]
2> [2*X || X <- L ].
[2,4,6,8,10]
3> Buy = [{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}].
[{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}]
4> [{Name, 2*Number} || {Name, Number} <- Buy].
[{oranges,8},{newspaper,2},{apples,20},{pears,12},{milk,6}]

算術演算子

演算子 説明 引数の型 優先順位
  • X | + X | 数 | 1
  • X | - X | 数 | 1 X * Y | X * Y | 数 | 2 X / Y | X / Y (浮動小数点除算) | 2 bnot X | X のビットごとの否定 | 整数 | 2 X div Y | X と Y の整数除算 | 整数 | 2 X rem Y | X を Y で割った整数剰余 | 整数 | 2 X band Y | X と Y のビットごとの論理積 | 整数 | 2 X + Y | X + Y | 数 | 3 X - Y | X - Y | 数 | 3 X bor Y | X と Y のビットごとの論理和 | 整数 | 3 X bxor Y | X と Y のビットごとの排他的論理和 | 整数 | 3 X bsl N | X の算術左 N ビットシフト | 整数 | 3 X bsr N | X の算術右 N ビットシフト | 整数 | 3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment