1.erlang是什么
Erlang是一个函数式编程语言,动态类型,内建并行计算支持。
函数式编程:变量第一次赋值以后就不能改变, 没有循环语句等....
动态类型: 这个跟JS,PHP的动态类型相似, 变量类型不用预先定义.
内建并行: 即并发程序不是用系统进程,而是一个极度轻量级的内部"进程". 对,这东西在Erlang里面也叫"进程", 类似协程之类的东西 ()
总的来说,Erlang学起来,跟我之前学过的C/JAVA/PHP/JS 等各种非函数式语言都不一样,
其实我还不怎么明白,大概这样介绍一下, 有误请大神们指出.
2. Erlang的shell与简单第一个Erlang程序
安装好Erlang环境以后就能启动一个Erlang的shell了. (下载地址: http://www.erlang.org/download.html)
E:\data\erl>erl
Eshell V5.9.1
1> 1+1.
2
如上所示, 输入 1+1. ( 一定要输入 一加一点, 句号不能少, 你可以当这个是一个简易计算器~)
就能看到2.
这样, 我们就回用Erlang做简单加法了..后面我们来看乘法...
把上面代码保存成 tut.erl , 这个是必须跟 module(tut).module名字一样, 学java的同学应该可以理解.
输入1+1.
输入1+1.
输出一个数字的两倍
-module(tut).
-export([double/1]).
double(X) ->
2 * X.
3> c(tut).
{ok,tut}
然后在命令行输入
c(tut). 编译之, 最后的句号不能少~ (感觉回到小学课堂, 写作文必须写句号的赶脚,,,)
4> tut:double(10).
20
然后输入 tut:double(10). 运行之. 你可以看到, 我们并没有写输出语句 (print 之类的), 但是,这里有输出20, 这是因为, 每一句话 (以点号结束的)都有返回, 即输出值, 包括编译c(tut). 命令
3. 变量,元子与元组
前面的第一个程序主要是为了演示编译
c(tut).,
运行
tut:double(10). ,
现在具体解释上面的代码
很多童鞋可能会问, 为什么Erlang的第一个程序不是hello world, 因为我发现, Erlang里面计算题最简单

变量:
-module(tut1). %%"声明"模块名,让外部可以调用, 另外, 顺便说一句, %% 是Erlang里面的注释
-export([mult/2]). %%"声明"函数名,让外部可以调用 mult/2 表示 mult 有2个参数,分别是"X" , "Y", XY都是变量, 变量需要大写首字母~
mult(X, Y) -> %%定义函数, 这里箭头 "->" 就是表示后面是一个函数拉~
X * Y. %%函数内容, 依然是 点号结束这个函数.
元子:
来看下一个程序(文件: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
简单来说, 所谓元子就是一种枚举, convert() 第二个参数只能能是 inch/centimete, 并且针对不同值, 执行不同代码. 有点 if /else if 的赶脚, 不过Erlang的选择语句还有其他方式.
元组
元组就是多个元子组合在一起? 当然不完全是了,
元组用大括号{}包含起来, 两个值之间逗号隔开, 值不止是元子, 变量也可以
类似C语言的结构体好了
看一个计算
水果总金额的代码好了,为了直观, 这个实例我用C语言写对应的写了一部分
C语言:
enum fruit {apple, orange}; //不同种类的水果,对应元子的定义,
struct fruit_info{ //水果价格, 对应元组~~
float weight; //水果, 对应变量定义
fruit f1;
};
float getTotalPrice(float weight, fruit _f1) { //根据不同水果, 计算金额,
if (f1 == apple) {
return weight * 8.5;
}
else if (f1 == orange) {
return weight * 3.4;
}
}
--------------------------------------------------------------------------------------
下一篇 列表,递归(代替循环) 在这里