Erlang学习笔记(1) --

本文是Erlang学习笔记的第一部分,介绍了Erlang作为函数式编程语言的特点,包括动态类型和内置并行计算能力。Erlang的进程与传统操作系统进程不同,更轻量级。接着简要提到了Erlang的shell及首个程序,后续内容将涉及变量、元组等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.
输出一个数字的两倍
-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;
	}
}






--------------------------------------------------------------------------------------
有活干了, 先闪了.
下一篇 列表,递归(代替循环) 在这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值