字符串:
在erlang中字符串就是一个整数列表。
模块:
<span style="font-size:18px;">-module(tut).
-export([getnum/1]).
getnum(N) ->
tut4:getnum(N).<pre name="code" class="plain">
</span>
<span style="font-size:18px;">-module(tut4).
-export([getnum/1]).
getnum(Name) ->
case Name of
a -> 1;
b -> 2
end.
</span>
fun使用:
<span style="font-size:18px;">-module(tut).
-export([for/3]).
for(Max,Max,F) ->
[F(Max)];
for(I,Max,F) ->
[F(I) | for(I + 1,Max,F)].</span><pre name="code" class="plain"><span style="font-size:18px;">
</span>
<span style="font-size:18px;">41> c(tut).
{ok,tut}
42> tut:for(1,5,fun(I) -> 2*I end).
[2,4,6,8,10]
</span>
<span style="font-size:18px;">-module(tut).
-export([sum/1]).
sum([]) ->
0;
sum([Head | Rest]) ->
Head + sum(Rest).
44> c(tut).
{ok,tut}
45> tut:sum([1,2,3]).
6
46> </span>
<span style="font-size:18px;">-module(tut).
-export([map/2]).
map(_,[]) ->
[];
map(F,[Head | Rest]) ->
[F(Head) | map(F,Rest)].
48> c(tut).
{ok,tut}
49> tut:map(fun(I) I*2 end,[1,2,3]).
* 1: syntax error before: I
49> tut:map(fun(I)-> I*2 end,[1,2,3]).
[2,4,6]
50> </span>
<span style="font-size:18px;">-module(tut).
-export([total/1]).
-import(lists,[sum/1,map/2]).
total(L) ->
sum( map(fun(I) -> I*2 end,L) ).
55> c(tut).
{ok,tut}
56> tut:total([1,2,3]).
12
57> </span>
列表解析:
<span style="font-size:18px;">-module(tut).
-export([map/2]).
map(F,L) ->
[F(X) || X <- L].
</span>
<span style="font-size:18px;">-module(tut).
-export([sort/1]).
sort([]) ->
[];
sort([Head | Rest]) ->
sort([X || X <- Rest,X < Head])
++ [Head] ++
sort([X || X <- Rest,X >= Head]).
68> c(tut).
{ok,tut}
69> tut:sort([22,1,34,2,5,3,22]).
[1,2,3,5,22,22,34]
70> </span>
毕达哥拉斯三元组:-module(tut).
-export([pythag/1]).
pythag(N) ->
[{A,B,C} || A <- lists:seq(1,N),
B <- lists:seq(1,N),
C <- lists:seq(1,N),
A + B + C =< N,
A * A + B*B =:= C * C].
74> c(tut).
{ok,tut}
75> tut:pythag(16).
[{3,4,5},{4,3,5}]
76>
-module(tut).
-export([test/1]).
test([]) ->
[[]];
test(L) ->
[ [H | R] || H <- L,R <- test(L -- [H])].
84> c(tut).
{ok,tut}
85> tut:test("abc").
["abc","acb","bac","bca","cab","cba"]
86>
断言:
-module(tut).
-export([max/2]).
max(X,Y) when X > Y -> X;
max(_,Y) -> Y.
88> c(tut).
{ok,tut}
89> tut:max(1,2).
2
90>
test(X,Y) when is_integer(X),X > Y,Y < 6 ->
Y.
Record:
默认字段有默认值;
-record(stu,{name = joe,age = 20,text}).
93> rr("rec.hrl").
[stu]
94> X = #stu{}.
#stu{name = joe,age = 20,text = undefined}
95> Y = #stu{age = 21}.
#stu{name = joe,age = 21,text = undefined}
96> Z = Y#stu{}.
#stu{name = joe,age = 21,text = undefined}
97> <pre name="code" class="plain">97> #stu{name = N} = Z.
#stu{name = joe,age = 21,text = undefined}
98> N.
joe
99> Z#stu.name.
joe
100>