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 ...
随机推荐
- php 如何进入mysql数据库
我是初学者,有两台电脑,进入数据库通用的方法直接找mysql.exe,如下例: F:\Program Files\wamp\bin\mysql\mysql5.5.20\bin
- Python开发【第二章】:Python的数据类型
基本数据类型 一.整型 如: 18.73.84 整型具备如下功能: class int(object): """ int(x=0) -> int or long i ...
- CentOS6.5Minimal安装Gitlab7.5
文章出处:http://www.restran.net/2015/04/09/gilab-centos-installation-note/ 在 CentOS 6.5 Minimal 系统环境下,用源 ...
- 当标签上写了runat="server" 后,<%%>就会无效
当标签上写了runat="server" 后,<%%>就会无效 //这是错误的写法 <input type="hidden" runat=&q ...
- iOS - (TableView中利用系统的 cell 设置 cell.textlabel 位置和大小)
今天工作稍微的遇到了一点小小的难题,需求效果中 TableView cell 中的 Label 字体大小比原先系统中的要大些且 Label 位置不是在前面,而是在中间往后,对于这个问题我第一时间也是想 ...
- 清除UIWebView的缓存
//清除cookies NSHTTPCookie *cookie; NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCook ...
- 到底UDP和TCP是什么个概念?
今天在论坛看到一牛人对tcp和udp的解释和区分,突然间恍然大悟. 以下全为拷贝. 在现实生活中,“要想富,先修路”:同时人总要“居有定所”,于是盖起了N多的房子.但是当你和同事商量好去做客的时候却发 ...
- swift语言实战晋级-第9章 游戏实战-跑酷熊猫-9-10 移除平台与视差滚动
9.9 移除场景之外的平台 用为平台是源源不断的产生的,如果不注意销毁,平台就将越积越多,虽然在游戏场景中看不到.几十个还看不出问题,那几万个呢?几百万个呢? 所以我们来看看怎么移除平台,那什么样的平 ...
- Leetcode: Graph Valid Tree && Summary: Detect cycle in undirected graph
Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), ...
- break和continue的区别以及标签label的使用
break表示直接跳出当前循环,break只能运用于switch--case语句以及循环之中 continue则表示跳出当次循环,继续执行下一次循环 label标签则可以选择break,或者conti ...