Erlang学习笔记二
2021/6/12 18:30:57
本文主要是介绍Erlang学习笔记二,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
列表推导式
Buy = [{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}]. 1 ->[{Name,2*Number}||{Name,Number} <- Buy]. <- [{oranges,8},{newspaper,2},{apples,20},{pears,12},{milk,6}] 2 ->[{2*Number}||{Name,Number} <- Buy]. <-[{8},{2},{20},{12},{6}] 利用shell 编写第一条的时候,会把每一个商品的金额乘以2, 然后利用第二条发送的时候 发现只会返回乘以2,因此可以看出控制输出内容在于列表推导式的第一条元组 解读 从右到左的顺序,首先将Buy 放到列表推导式中,然后分值变量,通过|| 类似与运维的管道符。将数值进行处理 而在erlang中也说明了左边第一个元组可以叫做构造器(construcuor)
lib_misc.erl
-module(lib_misc). -export( [qsort/1] ). qsort([] ) -> []; qsort([Pivot|T]) -> qsort([X || X <- T, X < Pivot]) ++ [Pivot] ++ qsort ([X || X <- T,X >= Pivot]). ->C = [23,6,2,9,27,400,78,45,61,82,14]. <-[23,6,2,9,27,400,78,45,61,82,14]. ->L = [23,123,54,123,78,123]. <-[23,54,78,123,123,123]. 解读 执行qsort的时候将C 变成头与尾,然后在向下执行 第一个表达式的意思就是将头与每个数值新型比较,每个数值 <头部的将他存储起来 , 然后 将 上下两个列表相加返回 然后在向下执行比较比他大或者等于他的
内置函数(BIF)
list_to_tuple 将列表转换成元组 time() 时分秒返回时间
归集器
odds_and_evensl(L) -> Odds = [X || X <- L, (X rem 2) =:= 1], Evens = [X || X <-L, (X rem 2) =:= 0], {Odds,Evens}. => lib_misc:odds_and_evensl([1,2,3,4,5,6]). <- {[1,3,5],[2,4,6]} odds_and_evens2(L) -> odds_and_evens_acc(L,[],[]). odds_and_evens_acc([H|T],Odds,Evens) -> case (H rem 2) of 1 -> odds_and_evens_acc(T,[H|Odds],Evens); 0 -> odds_and_evens_acc(T,Odds,[H|Evens]) end; odds_and_evens_acc([],Odds,Evens) -> {Odds,Evens}. -> lib_misc:odds_and_evens2([1,2,3,4,5,6]) <- {[5,3,1],[6,4,2]} 解读 第二个例子有点绕,因为erlang没有像python里面的for循环,所以所有的数据就像加工一样买一层一层的剥 首先 调用了一下当前第一个函数 也就是odds_and_ecens2,然后里面执行了下面的两个函数,L值的情况下 分出头和尾,然后将两个空列表也进行了传输, 第一次case 用头除去当前的2判断是否是1或者0, 如果是1的话那么,那么继续调用这个函数,并且将刚才判断的1或者0的放入头,也就是反转了列表,继续剥 等到为空的时候则 将分好的两个列表打包成元组返回
记录与映射组(map)
其实就相当于Python的字典 可以保存到一个文件里面 其拓展名为.hrl -record(todo,{status=reminder,who=joe,text}). 创建了一条字典,名字是todo rr("当前创建拓展名的文件") 记录到shell里面 #todo{} 相当于创建实例吧 在Python里面 ->X1 = #todo{status=urgent,who=joe,text="11"}. <-#todo{status = urgent,who = joe,text = "11"} ->X2 = X1#todo{status=1} <-#todo{status = 1,who = joe,text = "11"} 语法 #todo{key1=Val1, ..., keyN=ValN} 用于创建一个类型为 todo 的新纪录。所有的键都是原子,而且必须与记录定义里所用的一致。如果省略 了一个键,系统就会用记录定义里的值作为该键的默认值。 在第4行复制了一个现有的记录。语法 X1#todo{status=done} 的意思是创建一个 X1 的副本 (类型必须是 todo ),并修改字段 status 的值为 done 。请记住,这么做生成的是原始记录的一个 副本,原始记录没有变化
提取
->#todo{who=W,text=Txt} = X2. <-#todo{status = 1,who = joe,text = "11"} ->W <-joe ->Txt <-11 ->X2#todo.text <- 11
在函数里面写入
clear_status(#todo{status=S,who=W}=R) -> %% 在函数内部,S和W绑定了记录里面的字段值 R是整个记录 do_something(X) when is_record(X,todo) -> block code..... 这个子句会在 X 是 todo 类型的记录时匹配成功。
映射组
即,没有原子作为名字的一组字典,直接就变成字典了 与上面记录不同的就是记录就跟Python一样有变量名指向这个字典 ->F2 = #{b => 2, a => 1}. <-#{a => 1,b => 2} ->F1 = F2. <-#{a => 1,b => 2} ->F3 = F1#{c => xx}. <-#{a => 1,b => 2,c => xx} -> F1. <-#{a => 1,b => 2}
提取
->Henry8 = #{class => king,born => 1491,died => 1574}. <-#{born => 1491,class => king,died => 1574} ->#{ born := B} = Henry8. <-#{born => 1491,class => king,died => 1574} ->B. <-1941
这篇关于Erlang学习笔记二的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南