我了解Erlang语言最早是由erlangC公式知道的,当时是查找排班系统用到的erlang c公式,查出了Erlang语言,顺便看到这是一个用于并发系统的语言,但是当时没有十分在意。
今天无聊上itpub网站看到很多人推崇这种语言,说是一种智能语言,类似于LISP,有望替代JAVA,最初由爱立信发明用于电信领域,不知道是不是具体用于电话排队。据说有好多优点:并发、分布式、健壮、软实时性、热代码升级、递增式代码装载、高效外部接口。
找到官方网站,看了一点手册和入门指导的内容,准备下载编译环境,可以有54兆,太大,放弃了。不得已,阅读几则itpub的erlang语言入门文档,才明白该语言是函数为基础,所谓函数式编程可能就是这种风格,函数式编程起源于50年前的lisp,lisp继承者是Common Lisp,人工智能方面的专家用得多,.net的F#和JAVA的javaFX也是函数式变成语言。
下载手册,提取关于命令解析器、数组、元组、常量、模块、函数、内建函数、判断语句、选择语句、变量、终端输出、分布式编程、高端函数、进程、消息传递的内容。以此强化自己对该语言的理解。
1、The Erlang Shell
外壳,命令解析器;和unix的众多shell、windows的cmd类似,可以在其中直接写erlang语言代码并运行他们看他们的执行结果,在unix中执行erl启动命令解析器,windows中运行安装后的图标。在命令解析器中一个典型的效果是输入数字和运算符能直接输出计算结果,当作计算器使用。
2、Modules
Erlang代码被划分为模块,一个模块由一系列的属性和函数申明组成,每句以英文句号结束。模块属性定义模块的一定的特征,包括一个标记和一个值,如:-tag(value).。tag必须是一个原子,而value必须是一串文字。模块属性包括:
-module(Module).模块声明,定义模块的名称,Module应该和文件(扩展名为erl)名称相同。是唯一的必须属性。
-export(Functions).引出函数,声明模块内部的函数,表示模块外部可见,可由其他模块引用或者直接在shell调用
-import(Module,Functions).引入指定模块的函数。被引入的函数能被本模块调用,相当于本地函数
-compile(Options).编译选项。
-vsn(Vsn).模块版本。
3、Functions
函数声明:由分号分隔的一到多个函数子句构成,结尾是英文句号,比如:
Name(Pattern1,...) [when GuardSeq] ->
Body;
其中Name是函数名称,Pattern1等是参数,GuardSeq是可选的保护序列,Body是函数体,->用于分隔函数体。函数体由一到多个表达式组成,表达式之间以逗号隔开。
函数执行:前提是使用-export(Functions).引出函数,执行格式为Module.Function(Pattern),其中Module为模块名称,Function为函数名称,Pattern为参数列表。
尾递归函数:函数体的最后一句调用自身;尾递归不消耗系统资源,所以尾递归可无限调用,比如
loop(N) ->
io:format("~w~n", [N]),
loop(N+1).
内建函数:BIFs,由C代码实现,完成erlang代码困难或者不能的事情。大多数内建函数属于erlang模块,也有少量属于lists/ets等模块。属于erlang模块的BIFs自动引入,而不需要显示import。
4、Atoms
原子,有人译作常量,是erlang语言的一种数据类型,以小写字母组成,只是表示简单的名称,没有其他意义,和有值的变量不同。
5、Tuples
元组,把关联的东东绑定在一块便于理解,使用大括号标记,元组的元素之间以逗号隔开,比如:{chongqing,{c,12}},表示重庆的温度为12摄氏度,其中12和原子c是一个元组,然后和原子chongqing在组合成一个元组。
(待续)