本文主要是介绍Erlang程序设计[Part1-Part2 chapter4],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言:
环境安装
Erlang Shell,CSDN搜教程
Erlang Shell实操
启动 erl
Erlang Shell以表达式为执行单位?
结束标志 .加上回车
Part1 为何用 Erlang
chapter 1 什么是并发
并发vs并行
并发 单核cpu运行多个进程 一次运行一个
并行 多核cpu同时运行多个进程
给并发建模
场景:
以person模块为例,person的代码会放在名为person.erl的文件里
每行分别是什么意思?
spawn是什么?
基本函数,它会创建一个并发进程并返回一个进程标识符。
执行流程:
参数详解
FuncName是模块里的函数名
[Arg1, Arg2, ...]是一个列表,包含了想要执行的函数参数
返回值 进程标识符
收到消息时,From为绑定为发生消息的进程,Message则是要回复的消息
在Erlang里,并发性由Erlang虚拟机提供,Erlang是一种并发编程语言
chapter 2 Erlang速览
=操作符
注意:Erlang中变量只能被绑定一次,即变量所指内存内容不能被改变,是一次性赋值变量
变量和原子
退出shell ctrl+c+a(abort)
TODO:需要搞清楚的是:在VSCode中 是用的什么编译器?或者说 Erlang代码生成可执行程序的流程shell到底是个什么东西?shell是自带编译器吗?操作系统是自带编译器的吗?终端又是什么?
ctrl ~启动VSCode内终端
Part2 顺序编程
erlang shell内快捷键
chapter 3 基本概念
erlang中整数运算 没有位数限制
浮点数操作
/ div rem
/:计算浮点数结果
div:取整
rem:取余
原子
在Erlang里,原子被用于表示常量值。原子是全局性
单引号与双引号:
erlang中单引号用于表示大写字母开头的原子;
chapter 4模块与函数
area是函数名()内是一个函数(因为是一个元组) 函数方法用->分割,当匹配成功时调用对应方法。函数内部用;做分隔符 。函数内部由各个子句构成,函数隐式的返回值是最后一条子句的值
补充:
,-->and
;-->or
. -->done
fun:基本的抽象单元
Erlang是一种函数式编程语言。此外,函数式编程语言还表示函数可以被用作其他函数的参
数,也可以返回函数
fun是匿名的,你可以使用fun定义任何方法,但是他们统称为fun
定义fun
使用fun
fun可以有任意数量的参数
fun内定义多个子句
注意 要以end.结尾
以fun作为参数的函数
lists:map/2 map(F,L)
列表L中的每个元素都应用到F函数中,返回一个列表
lists:filter(P, L)
返回一个列表,列表中存储的是true值(P(E)==true),Even(E)==true
map和filter等函数能在一次调用里对整个列表执行某种操作,我们把它们称为一次一列表 (list-at-a-time)式操作。
返回fun的函数
Mult其实就是fun(Times)... end.
Mult(3) 返回的就是 3*X end,所以Tripe就是3*X end
erlang中归集器、和构建自然顺序的列表?
定义自己的控制抽象
定义一个for循环
简单列表处理
列表推导
是无需使用fun、map或filter就能创建列表的表达式
使用列表推导使列表中元素扩大2倍
[ F(X) || X <- L]标记的意思是“由F(X)组成的列表(X从列表L中提取)”。因此,[2*X || X <- L ]的意思就是“由2*X组成的列表(X从列表L中提取)”。
内置函数(BIF build in function)
内置函数能提供操作系统的接口,并执行那些无法用Erlang编写或者编写后非常低效的操作。
内置函数的使用:
内置函数是自动导入的,因此不需要指明模块
关卡
1.用于函数主体做判断条件
2.用于作为表达式,返回值是true or false
关卡序列
关卡序列(guard sequence)是指单一或一系列的关卡,用分号(;)分隔
对于关卡序列G1; G2; ...; Gn,只要其中有一个关卡(G1、G2……)的值为true,它的值就为true。
关卡
由一系列关卡表达式组成,用逗号(,)分隔。关卡GuardExpr1, GuardExpr2, ... , GuardExprN只有在所有的关卡表达式(GuardExpr1、GuardExpr2……)都为true时才为true。
true关卡的作用
true关卡表达的就是一定匹配。
case 和 if 表达式
case表达式
语法
首先,Expression被执行,假设它的值为Value。随后,Value轮流 与Pattern1(带有可选的关卡Guard1)、Pattern2等模式进行匹配,直到匹配成功。一旦发现 匹配,相应的表达式序列就会执行,而表达式序列执行的结果就是case表达式的值。如果所有模式都不匹配,就会发生异常错误(exception)。
if表达式
语法
注意:if表达式必须至少有一个关卡的执行结果为true,否则就会发生异常错误。
很多时候,if表达式的最后一个关卡是原子true,确保当其他关卡都失败时表达式的最后部分会被执行。
因为if是一种表达式,而所有的表达式都应该有值
这篇关于Erlang程序设计[Part1-Part2 chapter4]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!