昨天打印了Joe Armstrong的《programming Erlang》,迫不及待地开始了阅读。本想写读书笔记,发现JavaEye的hideto早就写过了,作罢,学习他。今天迈开erlang的第一小步。
1下载并安装
fedora的安装我上篇说过了。今天在windows下搞。http://www.erlang.org/download.html 下载Sept 3, 2008 R12B-4 (最新的Nov 5, 2008 R12B-5 下载时发现有木马,没敢下)。
2创建所需目录和文件
安装完毕后,在c盘,我创建了erlwork目录。根据书里的例子,在erlwork目录下,创建一个文件geometry.erl,内容如下:
-module(geometry).
-export([area/1]).
area({rectangle,Width,Ht}) -> Width * Ht;
area({circle,R}) -> 3.14159 * R * R.
这个模块的功能很简单,计算矩形和圆形的面积。第一句是定义模块名称,第二句是告诉编译器,我有一个函数,名叫area,它有1个参数。
3执行测试
开始-程序-Erlang OTP R12B-Erlang 打开编辑器,出现如下提示:
Erlang (BEAM) emulator version 5.6.4 [smp:2] [async-threads:0]
Eshell V5.6.4 (abort with ^G)
我们检测一下当前工作的目录(类似eclipse的workspace的概念),输入:
1> pwd()
1> .
C:/Program Files/erl5.6.4/usr
ok
刚开始使用erlang,总忘记在结束的时候输入. 只好折行再补充。
这个目录不是我们需要的。我们改到c盘的erlwork目录,输入:
2> cd("c:/erlwork").
c:/erlwork
ok
好了,现在开始干活。首先编译我们的erl文件,编译好后将出现一个.beam文件。
完全类似.java文件编译成.class文件。输入:
3> c(geometry).
{ok,geometry}
现在编译好了,erlwork中有了geometry.beam这样一个文件。
erlang是函数编程语言,开始测试我们的函数吧。
4> geometry:area({rectangle,10,5}).
50
5> geometry:area({circle,1.4}).
6.157516399999999
第一个测试成功。
再来看一个:
定义一个list:
1> L=[1,2,3,4].
[1,2,3,4]
定义一个匿名函数Double:
3> Double=fun(X) -> 2* X end.
#Fun<erl_eval.6.13229925>
利用erlang函数库和那个名叫Double的Funs,计算我们定义好的名叫L的list
4> lists:map(Double,L).
[2,4,6,8]
效果不错。
今天迈出去第一小步。感觉erlang的冲击力太大了,完全和面向对象编程不同,这种感受很折磨人,同时也很刺激。
当看到erlang使用递归玩for循环时,感觉high得不行。
ok,今天就到这里。