Erlang-基础篇
一、整数运算:
1、Erlang采用不定长的整数来进行整数的算术演算。在Erlang中,整数运算没有误差,因此无需担心运算溢出,也不用为了一个固定字长容纳不下一个大整数而伤脑筋;
二、变量:
1、所有的变量都必须要以大写字母为开头;
2、在Erlang中,变量恢复了它在数学中的含义。当把一个变量和值关联在一起时,你其实就做出了一项断言,也就是对一个事实的陈述,这个变量的值是多少,仅此而已;
Erlang中的变量是单一赋值变量。恰如其名,单一赋值变量的值只能一次性地给定。一个变量一旦被赋了值,你想再次改变它,就会得到一个错误。一个变量如果含有一个被赋值的值,就称为绑定变量,否则,则被称为自由变量。一开始,所有的变量都是自由的。
Erlang中的变量仅是对值的一个引用,就具体实现而言,一个绑定变量就是一个指针,这个指针指向存放那个值的存储区,而那个值是无法改变的;
用术语来说,我们把可修改的内存区域称为可变状态(mutablestate)。Erlang是一个函数式语言,不存在可变状态。当多核编程来临的时候,采用不可变状态所带来的好处是难以估量的。如果用C,Java这样的传统的编程语言为多核CPU编写程序,就不得不应付共享内存带来的问题。要想不破坏共享内存,就必须在访问时对其加锁。程序还要保证在操纵共享内存时不会崩溃。
3、定义一个变量的词法单元就是这个变量的作用域。因此,如果在一个函数语句范围内使用X,那么X的值就不能跳出语句之外。在同一个函数的不同字句中,彼此之间也不存在全局或者共享的私有变量。如果X出现在许多不同的函数当中,那么这些X的值也都是各自独立的;
4、符号_称为匿名变量,与常规变量不同,在同一个模式中的不同地方,各个_所绑定的值不必相同;
三、模式匹配:
1、在大多数语言中,=都表示赋值语句。然而,在Erlang中,=表示一个模式匹配操作。Lhs=Rhs实际上是这样一个过程,对有段求值,然后将结果与左端进行模式匹配。当变量X是一个自由变量时,它的行为与赋值一致(可与任何值进行匹配)。
只有当=两边的值匹配时,该语句才会成立;
四、浮点数:
1、"/"永远返回读点书,浮点数必须含有小数点且小数点后至少有一位十进制数。当你用"/"来除两个数的时候,其结果会自动转换为浮点数。
2、div和rem用于整数除和取余数;
五、原子:
1、在Erlang中,原子用来表示表示不同的非数字常量值。原子是一串以小写字母开头,后跟数字字母或下划线(_)或邮件符号(@)的字符。使用单引号引起来的字符也是原子。使用这种形式,我们就能使得原子可以用大写字母作为开头或者包含非数字字符。例如:'Monday'。你还可以将原本不需要使用引号的原子引起来,'a'实际上就等于a。
2、Erlang中的原子是全局有效的,而且无需使用宏定义或者包含文件;
3、一个原子的值就等于原子自身。因此,如果输入的命令只有原子,那么Erlang shell会打印那个原子的值;
六、元组:
1、你若想将一定数量的项组成单一的实体,那么就可以使用元组(tuple)。将若干个以逗号分割的值用一对花括号括起来,就形成了一个元组。例如{joe,1.8}。这个元组包括了一个原子和一个浮点值;
2、元组中的字段没有名字,如:p={10,20}。通常使用一个院子作为元组的第一个元素来标明这个元组所代表的含义。如:{point,10,20};
3、元组可以嵌套。如:person={person,{name,joe},{height,1.80},{country,china}};
4、在声明元组时,就自动创建了元组,不再使用它们时,元组也随之销毁。Erlang使用垃圾收集器去回收没有使用的内存,因此我们不用担心内存分配的问题;
5、如果有一个元组,可以使用相同结构的模式去提取所要的字段值,并且只要在需要提取的字段位置上使用未绑定变量;
七、列表:
1、我们用列表存储数目可变的东西。将若干个以逗号分割的值用一对方括号括起来,就形成了一个列表。如:P=[1,1+2,{l,0}]。列表之中的各个元素可以有各自不同的类型;
2、如果T是一个列表,那么[H|T]也是一个列表,这个列表以H为头,以T为尾。竖线|可以将列表的头和尾分割开来,而[]则是空列表;
3、我们可以用模式匹配操作从一个列表中提取元素。假定现在有一个非空的列表L,那么表达式[X|Y]=L(这里的X,Y都是自由变量),可以把列表的头提取到X,将列表的尾提取到Y。
八、字符串:
1、Erlang中并没有字符串,字符串实际上就是一个整数列表。用双引号(")将一个字符括起来就是一个字符串。如:Name = "ssss";但要注意的是,这里的"ssss"仅仅是一个速记形式,实际上它意味着一个整数列表,列表中每一个元素都是相应字符的整数值;shell在打印一串列表值时,只有列表中的所有整数都是可打印字符,它才把这个列表当做字符串来打印;如:[83,117,114,112,114,105,115,101]会打印"Surprise",但是[1,83,117,114,112,114,105,115,101]会打印[1,83,117,114,112,114,105,115,101];
2、可以使用$符号来表示字符的整数值。例如,$a实际上是一个整数,表示字符a。比如:I=$s会打印出115;[I-32,$u,$r,$p,$r,$i,$s,$e]会打印出"Suprise";
3、字符串中的字符是Latin-1(ISO-8859-1)编码的字符。如果编码不是Latin-1,可能会出现显示有误的情况;
Erlang-基础篇的更多相关文章
- C#多线程之基础篇3
在上一篇C#多线程之基础篇2中,我们主要讲述了确定线程的状态.线程优先级.前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程.使用Monitor锁定线 ...
- 一步步学习javascript基础篇(0):开篇索引
索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...
- 2000条你应知的WPF小姿势 基础篇<15-21>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师,对C#和WPF有着极深的热情.最为出色的是他维护了两个博客:2,000Things You Should Know ...
- ABP框架实践基础篇之开发UI层
返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 说明 其实最开始写的,就是这个ABP框架实践基础篇.在写这篇博客之前,又回头复习了一下ABP框架的理论,如果你还没学习,请查看AB ...
- C#多线程之基础篇2
在上一篇C#多线程之基础篇1中,我们主要讲述了如何创建线程.中止线程.线程等待以及终止线程的相关知识,在本篇中我们继续讲述有关线程的一些知识. 五.确定线程的状态 在这一节中,我们将讲述如何查看一个线 ...
- C#多线程之基础篇1
在多线程这一系列文章中,我们将讲述C#语言中多线程的相关知识,在多线程(基础篇)中我们将学习以下知识点: 创建线程 中止线程 线程等待 终止线程 确定线程的状态 线程优先级 前台线程和后台线程 向线程 ...
- iOS系列 基础篇 03 探究应用生命周期
iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...
- iOS系列 基础篇 04 探究视图生命周期
iOS系列 基础篇 04 探究视图生命周期 视图是应用的一个重要的组成部份,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻. 以视图的四种状态为基础,我们来系统了解一下视 ...
- iOS系列 基础篇 05 视图鼻祖 - UIView
iOS系列 基础篇 05 视图鼻祖 - UIView 目录: UIView“家族” 应用界面的构建层次 视图分类 最后 在Cocoa和Cocoa Touch框架中,“根”类时NSObject类.同样, ...
- iOS系列 基础篇 06 标签和按钮 (Label & Button)
iOS系列 基础篇 06 标签和按钮 (Label & Button) 目录: 标签控件 按钮控件 小结 标签和按钮是两个常用的控件,下面咱们逐一学习. 1. 标签控件 使用Single Vi ...
随机推荐
- Vim编辑器-批量注释与反注释
标签:linuxLinuxLINUXvimVIMVim编程 2013-01-10 09:52 27517人阅读 评论(3) 收藏 举报 分类: Linux(18) 版权声明:本文为博主原创文章,未 ...
- SQL-Server2008 数据库发布订阅
参考博客园文章http://www.cnblogs.com/tyb1222/archive/2011/05/31/2064944.html 添加安全数据库 更改数据库名称 SQL语句 select @ ...
- SQL Server 2008 Express 安装或卸载时提示“重启计算机失败"的解决办法
安装或卸载SQL Server 遇到错误提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作.运行安装程序之前必须重新启动计算机.如下图: 解决办法: 1.在开始->运行中输入regedi ...
- 安装Cocoapods(Pods 管理iOS 第三方库)
安装 可先检测Mac电脑是否安装Pods.打开控制台: $ which pod 如果安装,结果如下;如果没有安装,控制台无反应. /usr/bin/pod 如果没有安装, 以下命令安装之. $ sud ...
- openId 列表
http://mp.weixin.qq.com/wiki/15/5380a4e6f02f2ffdc7981a8ed7a40753.html 根据OpenID列表群发[订阅号不可用,服务号认证后可用] ...
- Orchard学习系列-----如何运行的
感慨:当接触到微软这套程序时,代码实在是太好了,好的几乎都读不懂.很久之前就对这个套开源程序特别感兴趣,但读不明白也让人郁闷. 背景(Orchard官网): 可组装系统的CMS系统,OrChard在运 ...
- JDK JVM
- java mock
一篇文章: 5分钟了解Mockito 一.什么是mock测试,什么是mock对象? 先来看看下面这个示例: 从上图可以看出如果我们要对A进行测试,那么就要先把整个依赖树构建出来,也就是BCDE的实例. ...
- Swift游戏实战-跑酷熊猫 10 视差滚动背景
原理 实现 勘误 “实现”的视频中有个错误,如下 背景移动时有个错误,看红色部分,近景归位时,第二张图片的下标是1 if arrBG[0].position.x + arrBG[0].frame.wi ...
- Linux C进程内存布局
当程序文件运行为进程时,进程在内存中获得空间.这个空间是进程自己的内存空间.每个进程空间按照如下方式分为不同区域: 进程内存空间布局图 text:代码段.存放的是程序的全部代码(指令),来源于二进制可 ...