1 == 1
> true
1 == 1.0
> true
1 =:= 1.0
> false
(1 == 1) and (2 == 2)
> true
(1 == 1) or (2 == 2)
> true
構造体のようなもの
Fuga = #product{id=1, name="fuga"}, % レコード作成
#product{id=FugaId, name=FugaName} = Fuga, % レコードから値を取得
Fuga2 = Fuga#product{id=2}, % 値を変える
% 取得
[H|T] = [1,2,3].
> H=1 T=[2,3]
% 先頭に追加
[4|T]
> [4,2,3]
% 結合
T ++ T.
> [2,3,2,3]
[X + X || X <- [1,2,3,4,5], X > 1]
> [4,6,8,10]
[
{A,B,C} ||
A <- [1,2],
B <- [1,3],
C <- [2,4],
A < B, A < C
]
> [{1,3,2},{1,3,4},{2,3,4}]
% いつもの
lists:map(fun(N) -> N * N end, [1,2,3]),
> [1,4,9]
lists:flatmap(fun(N) -> if N > 2 -> []; true -> [N * N] end end, [1,2,3]),
> [1,4]
lists:foldl(fun(N, Sum) -> N + Sum end, 0, [1,2,3]),
> 6
lists:zip([1,2,3], [a,b,c]),
> [{1,a},{2,b},{3,c}]
% AがBのsuffixならtrue
lists:suffix([1], [3,2,1]),
> true
lists:suffix([1], [3,2,2]),
> false
% mapとfoldを同時に行う
lists:mapfoldl(fun(X, Sum) -> {2 * X, X + Sum} end, 0, [1,2,3,4,5]),
> {[2,4,6,8,10],15}
% fib(100)
% result : [55,34,21,13,8,5,3,2,1,1,0]
fib(N) ->
fib(N, 0, 1, []).
fib(N, A, B, L) ->
if
B < N -> fib(N, B, A + B, [A|L]);
true -> L
end.
% sum([1,2,3])
% result : 6
sum(L) ->
sum(L, 0).
sum([H|T], R) ->
sum(T, H + R);
sum([], R) ->
R.
% reverse([1,2,3])
% result : [3,2,1]
reverse(L) ->
reverse(L, []).
reverse([H|T], R) ->
reverse(T, [H|R]);
reverse([], R) ->
R.
% qsort([5,3,1,4,2,-1,-1,100])
% result : [-1,-1,1,2,3,4,5,100]
qsort(L) ->
case L of
[] -> [];
[H|[]] -> [H];
[H|T] ->
{Left, Eq, Right} = qsort(H, [H|T], [], [], []),
qsort(Left) ++ Eq ++ qsort(Right)
end.
qsort(N, [H|T], Left, Eq, Right) ->
if
H < N -> qsort(N, T, [H|Left], Eq, Right);
H == N -> qsort(N, T, Left, [N|Eq], Right);
H > N -> qsort(N, T, Left, Eq, [H|Right])
end;
qsort(_, [], Left, Eq, Right) ->
{Left, Eq, Right}.