来源:http://abloz.com
author:ablozhou
date: 2012-06-28
erlang语言以函数式编程和并发编程著称。它是从爱立信公司出来的,随着多核和并发编程,云计算越来越多,而逐渐占有一席之地。
它有很多死板的规定。如:变量以大写开头,变量不可更改,用递归代替循环等。习惯了c/c++这类语言的工程师,的确需要时间来转这个弯。
安装:
[zhouhh@Hadoop48 ~]$ sudo yum install erlang
或者在ubuntu下用apt-get install erlang
启动shell
[zhouhh@Hadoop48 ~]$ erl
Erlang (BEAM) emulator version 5.6.5 [source] [64-bit] [smp:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.6.5 (abort with ^G)
1>
最新版erlang是V5.8.1
计算器:
1> 3+2.
5
3> 1/3.
0.3333333333333333
4> q().
ok
注意,每个语句用.结束。
编写erlang文件
计算阶乘。
[zhouhh@Hadoop48 ~]$ vi test1.erl
-module(test1).
-export([fac/1]).
fac(1)->1;
fac(N)->fac(N-1)*N.
-module是模块名,类似java,python的包名。-export表示输出的函数列表。 第4行第5行,表示根据条件轮流执行。 如果输入是1,则返回1.如果输入是一个数字,则递归调用,直到1为止。
shell中执行:
1> c(test1).
{ok,test1}
2> test1:fac(10).
3628800
3> test1:fac(100).
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
4>
c()表示编译。调用时,用“模块名:函数().”方式。
[zhouhh@Hadoop48 ~]$ vi counter.erl
-module(counter).
-export([start/0, stop/1]).
-export([inc/1, dec/1, reset/1, current/1]).
start() ->
spawn(fun() -> loop(0) end).
stop(Pid) ->
Pid ! stop.
inc(Pid) ->
Pid ! inc.
dec(Pid) ->
Pid ! dec.
reset(Pid) ->
Pid ! reset.
current(Pid) ->
Pid ! {current, self()},
receive
Any -> Any
end.
loop(Count) ->
receive
stop -> ok;
inc -> loop(Count + 1);
dec -> loop(Count - 1);
reset -> loop(0);
{current, Pid} ->
Pid ! Count,
loop(Count)
end.
该模块采用进程方式工作。spawn生成进程,fun()是匿名函数,执行loop(0).
stop,inc,dec,reset,current,loop等是函数。Pid是变量。Pid!inc表示对Pid进程执行inc函数。receive表示接到进程消息,然后用正则来匹配。Any表示任何消息。所以loop函数,匹配stop,inc,dec,reset等。
执行:
Eshell V5.6.5 (abort with ^G)
1> c(counter).
{ok,counter}
2> Pid=counter:start().
<0.55.0>
5> counter:current(Pid).
0
6> counter:inc(Pid).
inc
7> counter:inc(Pid).
inc
8> counter:current(Pid).
2
9> counter:dec(Pid).
dec
10> counter:current(Pid).
1
11> counter:reset(Pid).
reset
12> counter:current(Pid).
0
13> counter:stop(Pid).
stop
命令行快捷方式
使用emacs行编辑命令
◆^P 获取上一行。
◆^N 获取下一行。
◆^A 将输入焦点移动到当前行首。
◆^E 将输入焦点移动到当前行尾首。
◆^D 删除当前光标所在的字符。
◆^F 向前移动一个字符。
◆^B 向后移动一个字符。
◆回车 执行当前命令。
请注意: ^X 表示Control + X 。尝试按下Control+P,看看什么会发生?
参考:
如非注明转载, 均为原创. 本站遵循知识共享CC协议,转载请注明来源