1.03.2014

Getting Started with Erlang pt.3

Erlang をはじめよう その3

 

前回 - mog project: Getting Started with Erlang pt.2 の続き

CHAPTER 5: Communicating with Humans

 

文字列リテラル

Unicode も標準で扱うことができる。

> io:format("h\"e\'l'l\\o\s\127\x4f\trld\n").
> io:format("~p ~p ~p ~w ~s ~c ~tc ~i ~n", [100, true, "yes", "yes", "yes", 88, 16#3042, 200]).
> $1.
> $A.
> $ .
> $あ.
文字列の操作

各種標準関数など。

> "erl" ++ "ang" == "erlang"
> string:concat("erl", "ang") =:= "erlang".
> hd("hello").
> hd('hello').    % error (this is an atom)
> length("hello").
> lists:nth(2, "hello").
> io:format("~c~n", [lists:nth(2, "hello")]).
> string:chr("hello", $l).
> string:str("hello", "lo").
> string:substr("hello", 3).
> string:substr("hello", 3, 2).
> string:sub_string("hello", 3, 4).
> string:tokens("this is a token.", " .").
> string:join(["one", "two", "three"], ",").
> string:words("this is a word.").
> string:chars($*, 10).
> string:copies("* ", 10).
> string:strip(" x  \n").
> string:strip(" x  ").
> string:left("x", 10).
> string:right("x", 10).
> string:centre("x", 10).
> lists:reverse("erlang").
> string:to_float("1.1 2 3").
> string:to_float("1 2 3").
> string:to_integer("1 2 3").
> string:to_integer("a1 2 3").
> string:to_lower("Hello World!").
> string:to_upper("Hello World!").
> integer_to_list(123).
> float_to_list(123.45).
> erlang:fun_to_list(fun(X) -> X * 2 end).
> list_to_atom("Hello").
ユーザ入力の読み取り
> io:read(">>> ").
>>> [1,2,3].
> io:read(">>> ").
>>> True.    % error
> io:get_chars(">>> ").
>>> 1
> io:get_line(">>> ").
>>> 1 2 3

 

CHAPTER 6: Lists

 

基本的な操作
> [1,X,4,Y] = [1,2,4,8].
> {X, Y}.
> lists:flatten([1,[2,4,8],16]).
> [1,2,4] ++ [8,16].
> lists:append([1,2,4], [8,16]).
> lists:append([[1,2,4], [8,16], [32,64]]).
> lists:seq(1, 10).
> lists:seq($A, $Z).
head と tail の操作
> [H1 | T1] = [1, 2, 4].
> {H1, T1}.
> [H2 | T2] = [1].
> {H2, T2}.
> [H3 | T3] = [].
> F = (fun ([], _) -> 1; ([Head|Tail], Fun) -> Head * Fun(Tail, Fun) end).
> F([1,2,4,16], F).
> [1|[2,3]].
> [1,2|[3]].
> [1,2|3].
> [[1,2]|[3]].
zip と key-value 操作
> T = lists:zip([1,2,3,4,5], [a,b,c,d,e]).
> lists:unzip(T).
> lists:keystore(7,1,[{1,tiger}, {3,bear}],{7,panther}).
> lists:keyreplace(7,1,[{1,tiger}, {3,bear}],{7,panther}).
> lists:keyfind(3,1,[{1,tiger}, {3,bear}, {7,panther}]).
> lists:keyfind(4,1,[{1,tiger}, {3,bear}, {7,panther}]).

 

CHAPTER 7:
Higher-Order Functions and List Comprehensions

 

単純な高階関数
> Tripler = fun (Value, Function) -> 3 * Function(Value) end.
> Tripler(6, fun(X)->20*X end).
> X=20.
> F=fun(Value)->X * Value end.
> f(X).
> X.    % 'X' is unbound
> Tripler(6, F).
> Tripler(math:pi(), fun math:cos/1).
高階関数を使ってリストを操作する
> Print = fun(Value) -> io:format("  ~p~n", [Value]) end.
> List = [1,1,2,3,5,8,13].
> lists:foreach(Print, List).
> lists:map(fun(Value) -> Value * Value end, List).
> [Value * Value || Value  lists:filter(fun(Value) -> (Value >= 3) and (Value rem 2 == 1) end, List).
> lists:filter(fun(Value) -> (Value >= 3) and (Value rem 2 == 1) end, List).
> [Value || Value = 3, Value rem 2 == 1].
> [Value || Value  lists:all(fun(Value) -> Value > 0 end, List).
> lists:any(fun(Value) -> Value < 0 end, List).
> lists:partition(fun(Value) -> (Value >= 3) and (Value rem 2 == 1) end, List).
> lists:dropwhile(fun(Value) -> Value =< 3 end, List).
> lists:takewhile(fun(Value) -> Value =< 3 end, List).
> lists:foldl(fun(Value, Accumulator) -> Value - Accumulator end, 0, [1,2,3,4]).
> 4-(3-(2-(1-0))).
> lists:foldr(fun(Value, Accumulator) -> Value - Accumulator end, 0, [1,2,3,4]).
> 1-(2-(3-(4-0))).

 

 

 

References

 

Related Posts

0 件のコメント:

コメントを投稿