Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1101767
  • 博文数量: 165
  • 博客积分: 5957
  • 博客等级: 大校
  • 技术积分: 2015
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-24 15:04
文章分类

全部博文(165)

文章存档

2014年(10)

2013年(14)

2012年(9)

2011年(22)

2010年(17)

2009年(17)

2008年(26)

2007年(34)

2006年(16)

我的朋友

分类: LINUX

2008-02-20 06:21:44

1.Modules and Functions
      finishing with a full stop "." and a carriage return.
      end this part with a ";" which indicates that there is more of this function to come.
      The files which are used to store the module must have the same name as the module but with the extension ".erl".
      module_name:function_name(arguments).
     
===== tut1.erl =====
-module(tut1).
-export([fac/1,mult/2]).
fac(1) ->
    1;
fac(N) ->
    N * fac(N - 1).
mult(X, Y) ->
    X * Y.
 
编译运行:
1> c(tut1).
{ok,tut1}
2> tut2:mult(3,4).
12
 
2.atoms
===== tut2.erl =====
-module(tut2).
-export([convert/2]).

convert(M, inch) ->
    M / 2.54;

convert(N, centimeter) ->
    N * 2.54.
编译运行:
9> c(tut2).
{ok,tut2}
10> tut2:convert(3, inch).
1.18110
11> tut2:convert(7, centimeter).
17.7800
12> tut2:convert(3, miles).
** exception error: no function clause matching tut2:convert(3,miles)
13> v(13)
{'EXIT',{function_clause,[{tut2,convert,[3,miles]},
                          {erl_eval,do_apply,5},
                          {shell,exprs,6},
                          {shell,eval_exprs,6},
                          {shell,eval_loop,3}]}}
 
3.atoms
===== tut3.erl =====
-module(tut3).
-export([convert_length/1]).

convert_length({centimeter, X}) ->
    {inch, X / 2.54};
convert_length({inch, Y}) ->
    {centimeter, Y * 2.54}.
 
编译运行:
14> c(tut3).
{ok,tut3}
15> tut3:convert_length({inch, 5}).
{centimeter,12.7000}
16> tut3:convert_length(tut3:convert_length({inch, 5})).
{inch,5.00000}
 
4.lists
17> [First |TheRest] = [1,2,3,4,5].
[1,2,3,4,5]
18> First.
1
19> TheRest.
[2,3,4,5]
20> [E1, E2 | R] = [1,2,3,4,5,6,7].
[1,2,3,4,5,6,7]
21> E1.
1
22> E2.
2
23> R.
[3,4,5,6,7]
24> [A, B | C] = [1, 2].
[1,2]
25> A.
1
26> B.
2
27> C.
[]
===== tut4.erl =====
-module(tut4).
-export([list_length/1]).
list_length([]) ->
    0;
list_length([First | Rest]) ->
    1 + list_length(Rest).
 
编译运行:
28> c(tut4).
{ok,tut4}
29> tut4:list_length([1,2,3,4,5,6,7]).
7
Erlang does not have a string date type, instead strings can be represented by lists of ASCII characters. So the list [97,98,99] is equivalent to "abc".
4> [97,98,99].
"abc"
 
5.writing output to a terminal
31> io:format("hello world~n", []).
hello world
ok
32> io:format("this outputs one Erlang term: ~w~n", [hello]).
this outputs one Erlang term: hello
ok
33> io:format("this outputs two Erlang terms: ~w~w~n", [hello, world]).
this outputs two Erlang terms: helloworld
ok
34> io:format("this outputs two Erlang terms: ~w ~w~n", [hello, world]).
this outputs two Erlang terms: hello world
ok
6.Example
      A comment starts with a % character and goes on to the end of the line.
===== tut5.erl =====
%% This module is in file tut5.erl
-module(tut5).
-export([format_temps/1]).
%% Only this function is exported
format_temps([])->              % No output for an empty list
    ok;
format_temps([City | Rest]) ->
    print_temp(convert_to_celsius(City)),
    format_temps(Rest).
 
convert_to_celsius({Name, {c, Temp}}) ->                % No conversion needed
    {Name, {c, Temp}};
convert_to_celsius({Name, {f, Temp}}) ->                % Do the conversion
    {Name, {c, (Temp - 32) * 5 / 9}}.
 
print_temp({Name, {c, Temp}}) ->
    io:format("~-15w ~w c~n", [Name, Temp]).
 
编译运行:
1> c(tut5).
{ok,tut5}
2> tut5:format_temps([{moscow, {c, -10}}, {cape_town, {f, 70}}, {stockholm, {c, -4}}, {paris, {f, 28}}, {london, {f, 36}}]).
moscow          -10 c
cape_town       21.1111 c
stockholm       -4 c
paris           -2.22222 c
london          2.22222 c
ok
 
收工,下次练习从2.9节开始继续
阅读(1743) | 评论(0) | 转发(0) |
0

上一篇:perl基础

下一篇:c基础知识复习二

给主人留下些什么吧!~~