Erlang中的基本元素操作小结

Erlang shell中,用句号加空格、tab或回车来结束表达式,%表示注释的起点,;隔离子句。模块是.erl 文件,库的头文件.hrl, shell中的编译时c(),外编译命令时erlc, 退出shell用q(),或erlang:halt().

变量以大写字母开头,且不能重新绑定变量,只能一次性赋值,具有不可变状态。原子是全局的,不需要宏定义或包含文件,以小写字母开头,还可放在单引号内,是极简表达式。
 
元组(tuple)是一些数量固定的项目归组成单一实体{,}, 由于是匿名的,通常在第一个元素上贴标签,来增加可读性。提取元组中的值使用模式匹配操作符=,_为匿名变量,多个_不必绑定相同的值。但是,_Mode则是常规变量。例如:

代码如下:

2> Family={family,father,mother,son}.
{family,father,mother,son}
3> {_,X,Y,Z}=Family.
{family,father,mother,son}
4> X.
father
5> Y.
mother
6> Z.
Son

记录(record)是元组的另一种形式,可以给元组的各个元素关联一个名称。使用记录的情形:
1)  用一些预先确定且数量固定的原子表示数据
2)  元素数量和元素名称不会随时间改变
3)  大元组中每个元组有相同的结构
采用#myrecord{k1=v1,k2=v2..}来创建record。

列表(list)形如[,,]可以存放任意数量的事物。Head可以是任何事物,Tail通常仍然是个列表。只要用[…|T]构建一个列表,就应确保T是一个列表。同样使用模式匹配来提取列表中的元素。列表推导的常规形式:
[X||Qualifier1,Qualifier2,…]
X是任意一表达式,限定符qualifier可以生成器,位串生成器或过滤器。生成器的写法
Pattern<- ListExpr
反转一个列表时,要调用lists:reverse.
 
Erlang中没有字符串,字符串是个整数列表,”HelloCloud”是一个列表的简写,io:format来指定打印输出。
 
映射组(map)是键值对的关联性集合,内部作为有序计划存储,适用情形:
1)  键不能预知时来表示键值对数据结构
2)  存在大量不同键来表示数据
3)  效率不重要时的万能数据结构
4)  自解释型数据结构
5)  用来表示键值解析树,如xml或配置文件
6)  用Json来通信

映射组的语法:

代码如下:

#{key1 op val1,key2 op val2,…,KeyN op valN}

#后没有名称,op是=>或:=之一。 => 将现有键值更新为新值或给映射组增加一个新键值对。 :=用于更新。 健不能包含任何变量,值可以包含未绑定变量,在模式匹配成功后绑定。

映射组可以通过io:format 里的~p选项输出,并用io:read 或file:consult读取。

代码如下:

Maps:to_json(Map)->Bin 转化为二进制型json
Maps:from_json(bin)-> Nap, 将二进制json转化为map

Json与映射组的对应关系:

1)  Json数字:Erlang的整数或浮点数
2)  Json字符串:Erlang二进制型
3)  Json列表:Erlang列表
4)  true和false 对应
5)  映射组中的健必须是原子,字符串或二进制型,值必须用JSON的数据类型表示

(0)

相关推荐

  • Erlang中的基本元素操作小结

    Erlang shell中,用句号加空格.tab或回车来结束表达式,%表示注释的起点,;隔离子句.模块是.erl 文件,库的头文件.hrl, shell中的编译时c(),外编译命令时erlc, 退出shell用q(),或erlang:halt(). 变量以大写字母开头,且不能重新绑定变量,只能一次性赋值,具有不可变状态.原子是全局的,不需要宏定义或包含文件,以小写字母开头,还可放在单引号内,是极简表达式.   元组(tuple)是一些数量固定的项目归组成单一实体{,}, 由于是匿名的,通常在第一

  • MongoDB在PHP中的常用操作小结

    $mongodb = new Mongo(); //$connection = new Mongo( "$dburl:$port" ); // connect to a remote host (default port) $mydb = $mongodb->mydb;  //隐性创建数据库mydb $mydb = $mongodb->selectDB("mydb");  //直接选择已经存在的数据库 $collection = $mydb->my

  • shell中的数组操作小结和冒泡排序实现脚本分享

    shell数组介绍: 复制代码 代码如下: //数组变量定义: $ arr=(1 3 6 8 2 5 9 0 7 4) // 默认获取第一个元素 $ echo $arr // 通过下标访问,下面取的数组第二个元素,shell数组下标是从0开始 $ echo ${arr[1]}    // 访问整个数组 $ echo ${arr[@]}  or echo ${arr[*]} // 获取数组的长度(最大下标) $ echo ${#arr[@]}  // 获取单个元素字符串长度 $ echo ${#a

  • javascript中对Date类型的常用操作小结

    javascript中对Date类型的常用操作小结 /** 3. * 日期时间脚本库方法列表: 4. * (1)Date.isValiDate:日期合法性验证 5. * (2)Date.isValiTime:时间合法性验证 6. * (3)Date.isValiDateTime:日期和时间合法性验证 7. * (4)Date.prototype.isLeapYear:判断是否闰年 8. * (5)Date.prototype.format:日期格式化 9. * (6)Date.stringToD

  • C#中DateTime的时间加减法操作小结

    在C#语言中,DateTime是用来表示时间的类,在C#的DateTime时间类中,提供了好像时间对象加减法操作,可用于某一个时间对象加减 多少年.加减多少个月.加减多少天.加减多少小时.加减多少分钟.加减多少秒等操作,此文将总结C#的DateTime类中的时间加减操作运算. (1)加减多少年操作:AddYears方法,具体参考C#使用AddYears方法获取当前时间20年后的时刻. C#使用AddYears方法获取当前时间20年后的时刻 2019-08-10 10:01 在C#语言中,Date

  • Android开发中比较耗时的一些操作小结

    在Android软件开发过程中,经常遇到耗时操作.为了使手机app运行流畅,耗时操作需要在新的一个线程中完成.那么,Android手机应用开发中,耗时操作有哪些呢?下面来总结一下. 1.下载文件操作 2.网络连接操作(尤其是网络不好的时候) 3.音频格式转换操作 4.文件操作 5.比较大的数据的初始化操作 6.sleep函数等 注: 具体的功能还得根据业务需求来完成.

  • C#中DataGridView常用操作实例小结

    本文实例讲述了C#中DataGridView常用操作.分享给大家供大家参考.具体如下: public void Binder1() { DataTable tableType = DataBase.SQLDBHelper.GetDataTable("select top 200 unit_code,unit_name from unit "); DataTable table = DataBase.SQLDBHelper.GetDataTable("select top 2

  • jQuery中DOM常见操作实例小结

    本文实例讲述了jQuery中DOM常见操作.分享给大家供大家参考,具体如下: DOM属性操作 属性列表 属性 版本 说明 attr() 1.0 设置或返回文档节点的属性. removeAttr() 1.0 移除文档节点的属性. prop() 1.6 设置或返回DOM元素的属性. removeProp() 1.6 移除每个匹配元素的属性. addClass() 1.0 添加CSS类名. removeClass() 1.0 移除CSS类名. toggleClass() 1.2 切换CSS类名(存在就

  • Erlang中的模块与模式匹配介绍

    模块是Erlang的基本代码单元,erl文件编译后以.beam作为扩展名,采用UTF8字符集,.erl文件示意如下: -module(模块名,与存放模块的文件名相同) -export([方法名/输入参数的个数]) 复制代码 代码如下: Method1( {a,b,c})->a*b*c; Mehtod2({d,e})->d-e. 模块属性有两种类型:预定义型和用户定义型.   Erlang中用于代表函数的数据类型被称为fun,相当于python中的lambda,一般用于 1)      对列表里

  • Erlang中的映射组Map详细介绍

    主要是遇到 Map匹配的问题,所以顺便回忆一下 Erlang 中的映射组 Map,在其它语言中被称作 Hash 哈希或者 Dict 字典. Erlang 从 R17 版本开始支持映射组 创建映射组 Erlang 中的映射组用结构 #{} 表示,创建一个映射组可以这样 复制代码 代码如下: % 不管你怎么排序,最终结果都是按键的字典顺序排列的 #{ name => "wittyfox", age => 19 }. % => #{age => 20,name =&g

随机推荐