Skip to content

Instantly share code, notes, and snippets.

@oskimura
Last active March 4, 2018 03:47
Show Gist options
  • Select an option

  • Save oskimura/3886427c6551dd77b3618425310771d3 to your computer and use it in GitHub Desktop.

Select an option

Save oskimura/3886427c6551dd77b3618425310771d3 to your computer and use it in GitHub Desktop.
brew install erlang
"スタート" -> "全てのプログラム" -> "Erlang OTP " -> "Erlang"
4> 2#0101.
5
5> 16#deadbeaf.
3735928495
8> "a".
"a"
9> [$a,$b].
"ab"
10> X = 1.
1
11> X.
1
if
<条件式> -> <式1>;
<条件式> -> <式2>
end
2> X = abc.
abc
3> X.
abc
io:format("~p~n",[Term]).
case <式> of
<パターン1> -> <式1>;
<パターン2> -> <式2>
end
2> A = 3.
3
3> case A of 1 -> a; 2 -> b; 3 -> c end.
c
4> case A of 1 -> a; 2 -> b end.
** exception error: no case clause matching 3
5>
$ erl
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:10] [kernel-poll:false]
Eshell V5.10.4 (abort with ^G)
1>
6
2>
<関数名>(仮引数...) ->
<本体>.
signal(red) -> stop;
signal(blue) -> do;
signal(yello) -> carefull;
signal(_) -> error.
pow_tail(1,Ret) -> Ret;
pow_tail(X,Ret) -> pow_tail(X-1,X*Ret).
-record(<レコード名>, {<要素名1>,<要素名2>,...}).
rd(item, {id,name,price}).
7> rd(player, {name,hp}).
player
#<レコード名>{<要素名1>=初期値1, <要素名2>=初期値2,...}
9> P = #player{name="hoge", hp=3}.
#player{name = "hoge",hp = 3}
変数#<レコード名>.<要素>
$ erl -pz . -noshell -noinput -s モジュール名 関数名 -s init stop
10> P#player.name.
"hoge"
変数#<レコード名>{<要素>="hage"}.
11> P#player{name="hage"}.
#player{name = "hage",hp = 3}
#<レコード名>{<要素名1>=値,<要素名2>=変数名,..}
2> P = #item{id=1,name="test",price=100}.
3> #item{id=1} = P.
#item{id = 1,name = "test",price = 100}
4> #item{id=1,name=Name} = P.
#item{id = 1,name = "test",price = 100}
5> Name.
"test"
[<要素1>,<要素2>...]
1> [1,2,3].
[1,2,3]
len([]) ->
0;
len([Head|Tail]) ->
1+len(Tail).
{<要素1>,<要素2>...}
1> {1,2,3}.
{1,2,3}
#!/usr/bin/env escript
%% -*- erlang -*-
%%! -smp enable -sname factorial -mnesia debug verbose
main([String]) ->
try
N = list_to_integer(String),
F = fac(N),
io:format("factorial ~w = ~w\n", [N,F])
catch
_:_ ->
usage()
end;
main(_) ->
usage().
usage() ->
io:format("usage: factorial integer\n"),
halt(1).
fac(0) -> 1;
fac(N) -> N * fac(N-1).
<< <値1>:<サイズ1>/<タイプ>, <値2>:<サイズ2>/<タイプ> ...>>
1> Color = <<16#FF00FF:(8*3)>>.
<<255,0,255>>
2> <<R,G,B>> = Color.
<<255,0,255>>
2> <<R:8,_/binary>> = Color.
<<255,0,255>>
3> R.
255
io:format("~ts~n",[<<"お"/utf8>>]).
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:10] [kernel-poll:false]
Eshell V5.10.4 (abort with ^G)
1> [ X*2 || X<-[1,2,3,4,5], X<4 ].
[式 || パターン <- リスト, 条件]
<<式 || パターン <= バイナリ, 条件>>
Pid = spawn(<モジュール名>, <関数名>, <引数のリスト>)
$ chmod u+x factorial
Pid ! メッセージ
receive
<パターン1> ->
<処理1>;
<パターン2> ->
<処理2>;
............
<パターンN> ->
<処理N>
after n ->
<タイムアウト処理>
end
register(Atom,Pid)
try <評価される式> of
<パターン1> ガード1 -> <処理1>;
<パターン2> ガード2 -> <処理2>
catch
<例外のタイプ1>: <パターン1> ガード1 -> <例外処理1>;
<例外のタイプ2>: <パターン2> ガード2 -> <例外処理2>
after
<例外が起きても起きなくても実行される処理>
end
throw(<式>)
error(<式>)
-module(<モジュール名>).
-define{<マクロ>,<式>}
-record(<レコード名>, {<要素名1>,<要素名2>,...}).
$ ./factorial 5
factorial 5 = 120
-include("<ヘッダファイル>").
$ ./factorial
usage: factorial integer
$ ./factorial five
usage: factorial integer
$ escript factorial 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment