http://www.erlang.org/download/getting_started-5.4.pdf
错误提示:
(1)
<span style="font-size:18px;">-module(tut).
-export([fac/1]).
fac(1) ->
1.
fac(X) ->
X * fac(X - 1).<pre name="code" class="plain">
</span>
<span style="font-size:18px;">11> c(tut).
tut.erl:8: function fac/1 already defined
error
12> </span>
(2)
<span style="font-size:18px;">-module(tut).
-export([fac/1]).
fac(1) ->
1;
fac(X) ->
X * fac(X - 1).
13> c(tut).
{ok,tut}
14> </span>
(3)
<span style="font-size:18px;">-module(tut).
-export([fac/1]).
fac(X) ->
X * fac(X - 1);
fac(1) ->
1.
U14> c(tut).
tut.erl:12: Warning: this clause cannot match because a previous clause at line 7 always matches
{ok,tut}
15></span>
只有(2)运行阶乘才正确,若执行(3)将死循环,因为从上向下匹配函数。
tuple:
<span style="font-size:18px;">-module(tut).
-export([convert/1]).
convert({inch,X}) ->
{inch,X/2.54}.
20> tut:convert({inch,2}).
{inch,0.7874015748031495}
21> tut:convert(1).
** exception error: no function clause matching tut:convert(1) (tut.erl, line 6)
22> </span>
-module(tut).
-export([listlen/1]).
listlen([]) ->
0;
listlen([Head | Rest]) ->
1 + listlen(Rest).
io:format
42> io:format("").
ok
43> io:format("1~n").
1
ok
44> io:format("1~n~w",[1]).
1
1ok
45> io:format("1~n~w",[1,atom]).
** exception error: bad argument
in function io:format/3
called as io:format(<0.25.0>,"1~n~w",[1,atom])
46>
~w按顺序替换第二个列表的每项,~n替换新行
test:
-module(tut).
-export([format/1]).
%hello world
format([]) ->
ok;
format([City | Rest]) ->
print(convert(City)),
format(Rest).
convert({Name,{c,Temp}}) ->
{Name,{c,Temp}};
convert({Name,{f,Temp}}) ->
{Name,{c,(Temp - 32) * 5 / 9}}.
print({Name,{c,Temp}}) ->
io:format("~-15w ~w c~n",[Name,Temp]).
54> tut:format([]).
ok
55> tut:format([2,3]).
** exception error: no function clause matching tut:convert(2) (tut.erl, line 16)
in function tut:format/1 (tut.erl, line 12)
56> tut:format([{Bj,{f,12}},{jp,{c,12}}]).
* 1: variable 'Bj' is unbound
57> tut:format([{bj,{f,12}},{jp,{c,12}}]).
bj -11.11111111111111 c
jp 12 c
ok
58>
求最大值:
-module(tut).
-export([getmax/1]).
getmax([]) ->
ok;
getmax([Head | Rest]) ->
getmax(Rest,Head).
getmax([],Max) ->
Max;
getmax([Head | Rest],Max) when Head > Max ->
Tem = Head,
getmax(Rest,Tem);
getmax([Head | Rest],Max) ->
getmax(Rest,Max).
67> c(tut).
tut.erl:23: Warning: variable 'Head' is unused
{ok,tut}
68> tut:getmax([2,3,4,1,5]).
5
69>