Erlang01_编程基础(2)

总篇:2

编辑于 2025/4/29 20:40

截稿于 2025/4/29 22:20

1.承接

https://www.cnblogs.com/lty0712/articles/18852600

上一篇提到三个问题:

于本篇解答。

2.编辑器

现在,我们可以像Java那样编写完一个文件再编译运行,本人推荐vscode,方便高效

  1. 下载安装请自行完成,本文引用园内文章以供参考

https://www.cnblogs.com/zmdComeOn/p/12881907.html

  1. 打开vscode,安装erlang插件:

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

  1. 新建一个文件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(模块名,函数名,参数列表),这个概念会一直使用。

  1. 然后打开一个终端:

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

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

  1. 编译好了,复制一下内容到终端,运行程序,之后的程序中不会再展示编译过程,自行完成编译:
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>

接下来一一介绍黄色注明部分:

  1. tuple(元组):

{element1,element2,element3...},其中每个元素是任意类型元组可以嵌套元组。

元组通常用来封装一个事物的属性,也可称为字段,类比一下Java对象:

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

但是这也太不雅观了,接下来:

  1. record(记录):

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

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

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

解答了上篇第二问。

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

  • 元组大小:

其他操作,使用AI提问关键词即可获取相关API,比如我想:删除元组中某元素,获取元组中最后一个元素等等...

  1. 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 总结

至此,初探了的三个基本数据类型,仍存在疑惑:

  1. 如何批量创建学生记录,一直 Stu4=Stu3=Stu2=Stu1=#stu{...} 吗?
  2. 列表 [H|T] =List ,等号左边为什么不是一个变量而是一个列表形式?
  3. 目前只知道如何获取列表的第一个元素和其余元素,如何获取第二个元素?

以上。

posted on 2025-04-29 23:49  依只  阅读(31)  评论(0)    收藏  举报

导航