Erlang01_编程基础(2)
总篇:2
编辑于 2025/4/29 20:40
截稿于 2025/4/29 22:20
1.承接
https://www.cnblogs.com/lty0712/articles/18852600
上一篇提到三个问题:

于本篇解答。
2.编辑器
现在,我们可以像Java那样编写完一个文件再编译运行,本人推荐vscode,方便高效
- 下载安装请自行完成,本文引用园内文章以供参考
https://www.cnblogs.com/zmdComeOn/p/12881907.html
- 打开vscode,安装erlang插件:

- 注意是安装第一个,安装完毕后,新建一个文件夹erlang,用来存放代码文件:

- 新建一个文件test1.erl并复制一下内容:
-module(test1).
-export([start/0,start/1]).
start()->
"hello world".
start(Msg)->
Msg.
~ 以上文件:
- -module(test1) :称为 模块,模块名test1和文件名保持一致,简称M。
- -export([start/0]):称为 导出函数列表,[]内均为本模块导出的函数,以供其他模块调用,简称F。
- start/0,start():称为 0目函数,目:函数参数的个数,参数:无类型约束。
- start/1,start(Msg):称为 1目函数,参数之间以逗号隔开,所有参数合称为 Args,简称A。
- 一个完整的erl文件必定包含至少一个MFA(模块名,函数名,参数列表),这个概念会一直使用。

- 然后打开一个终端:

- 在终端内输入erl进入shell并输入 c(test1),表示编译这个erl文件:

- 然后可以看到多了一个编译后beam文件,类似Java的class文件,但是不可读:

- 编译好了,复制一下内容到终端,运行程序,之后的程序中不会再展示编译过程,自行完成编译:
test1:start().

至此,我们完成了使用编辑器环境写erlang程序的第一步。
解答了上篇第三问。
3.基本数据类型
上一篇例举了erlang中的数据类型:
| 名称 | 简介 | 示例 |
|---|---|---|
| integer | 整数 | 123 ,-123 |
| float | 浮点数 | 3.14, -3.14 |
| atom | 原子 | a,'A',hello, 'hello' |
| boolean | 布尔,特殊的表义原子 | true,false |
| tuple | 元组,类似Python的元组,其内每个元素可以是任意数据类型 | {ok,"success",1,{error,"fail"}} |
| list | 列表,类似Python的列表,其内每个元素可以是任意数据类型 | [114,514,"依旧依旧",""] |
| binary | 二进制,看着像IP似的,这里先不解释 | <<4:8.4:8.4:8,4:8>> |
| record | 记录,看着什么都不像嘛,这里先不解释 | #person{name="Jack", age=15} |
| map | 映射,看着像楼上,也不解释 | #{name => "Jack", age => 15} |
| fun | 函数,没错,函数也是数据类型,同样不解释 | fun(X) -> X * 2 end. |
| PID,Port,Reference | 进程Id,端口号,引用,熟悉又陌生,不管他 | <0.80.0>,<0.123>,<0.0.0.123> |
接下来一一介绍黄色注明部分:
- tuple(元组):
{element1,element2,element3...},其中每个元素是任意类型,元组可以嵌套元组。
元组通常用来封装一个事物的属性,也可称为字段,类比一下Java对象:



在Java程序中我们明确知道每个字段的含义:{姓名,年龄,成绩},但在元组中,我们只能看到其值而不知道其含义,于是就 写注释,注释由%%开头表明以此之后一行皆为注释:

但是这也太不雅观了,接下来:
- record(记录):
{record,element1,element2,element3...} ,发现和元组的区别在于第一个元素总是 'record',而这个record,它是一个原子,称为 记录名,记录不能直接书写,它需要定义,类似Java的实体类:


这样即使不写注释也能知道每个元素代表什么意思了, 记录实际上就是“带头”的元组,它可以让人知道本元组对应的数据模型是什么。现在我想改名:


牢牢记住 变量不变,所以我们只能通过重新声明一个变量名来接受数据,而不能用原变量名来接收:

解答了上篇第二问。
- 以上关于记录的操作: 原记录#记录名{需要修改的数据=新的值},返回一个新的记录.
- 关于元组的操作,元组的操作函数是 element/2:
- 获取元素:

- 元组大小:

其他操作,使用AI提问关键词即可获取相关API,比如我想:删除元组中某元素,获取元组中最后一个元素等等...
- list 列表:
这简直太熟悉不过了,把他当作Java中元素是任意类型的数组,[element1,elemnt2,element3...],注意它和元组的区别:[] 和{}:

erlang的列表具备广义表特性,可以轻松获得第一个元素:
https://www.cnblogs.com/Doing-what-I-love/p/5535112.html

另一个例子:

另一个


"Abc" 结果是65?,这里引出erlang中的"不存在的数据类型" :string,事实上,双引号的字符串是一个整数列表,整数为ASCII码值(计算机基础),"Abc"是[65,98,99] 的简写。当列表中整数全都在ASCII范围内,在打印时会自动转换为对应字符串,存在至少一个整数超出ASCII码表范畴的整数则原样输出,定义很长,实践下就知道了:
,数据实际上是整数列表而不是"Abc".
解答了上篇第一问。
4 总结
至此,初探了的三个基本数据类型,仍存在疑惑:
- 如何批量创建学生记录,一直 Stu4=Stu3=Stu2=Stu1=#stu{...} 吗?
- 列表 [H|T] =List ,等号左边为什么不是一个变量而是一个列表形式?
- 目前只知道如何获取列表的第一个元素和其余元素,如何获取第二个元素?
以上。
浙公网安备 33010602011771号