Erlang第一课----基本变量
1、(in Erlang shell)A sequence of expressions must be terminated with a period followed by whitespace; otherwise, it won't be executed. You can separate expressions with commas, but only the result of the last one will be shown.
2、Erlang shell中调试程序时,如果job僵掉了,可以用ctrl+G-> i -> c中断僵掉的job并连接到第一个job(这里不确定是第一个还是最后一个,待进一步确认)。ctrl+G进入任务管理器后,h是打印帮助菜单。
3、变量名第一个字母必须是大写;或者以下面线(_)开始,但是一般用来标示这个变量只是写来看的,我们后面不会再用,即don't care one。
4、变量不能进行第二次赋值,除非是赋同一个值。更准确来说,并不能说这是赋值,应该叫bound,即绑定;所以,我们完全可以把这里的Variable当做是别名,而且是被element唯一拥有的。
ps:在shell中,如果你给某个变量赋错了值,你可以使用f(Variable).来对其进行擦除;使用f().,即不带参数时,表示擦除所有变量。另外,该flush函数只有在shell中有。
ps: 还有这些也是常用的:1)h(). 用来打印最近的20条历史命令。2)b(). 查看所有绑定的变量。3) e(n). 执行第n条历史命令。4) e(-1). 执行上一条shell命令
5、变量命名不能以小写开始的原因是,还有另外一种类型的数据叫atom。每个atom关联了一个atom table,atom table在32为系统中占用4bytes内存,在64位系统中占用8个bytes内存;如果不是内存被用光或者是atoms的数量达到1048577,这些内存是不会被回收的,直到程序结束。
ps: 这些atom是保留的:
ps: 本质上,atom是实现了一个类似hash table的机制;atom的name其实是atom table的别名,可以当做是hash table里的key。(个人理解,待验证)
6、bool运算符and,or,xor,not等几个是双目运算符,会取出运算符两边的对象进行操作。andalso和orelse是单目运算符,只考虑右边的操作对象。
7、比较运算符有全等(=:=), 不全等(=/=),值相等(==),值不相等(/=);另外还有大于(>),小于(<),大于等于(>=),小于等于(=<)。
ps:唔,这里有个神奇的概念,至少从c/c++过来会觉得它神奇,以下比较是可以实现的:number < atom < reference < fun < port < pid < tuple < list < bit string. 所以,我们可以进行比较1(number)<false(atom),比较结果是true;而0(number) == false(atom)是错的,在Erlang里面,false并不代表一个数值。
8、tuples不知道该翻译成什么好,元组?数组?它是个和数组类似的存在,不过,它的元不仅仅是number而已。事实上,它的元可以是Erlang支持的任一类型。
9、我们可以这样取出一个tuple里的元素,这个是Erlang里面很重要的一个概念,叫patten matching:
> PreciseTemp={celsius, 23.213}.
{celsius,23.213}
>{celsius,T}=PreciseTemp.
{celsius,23.213}
> T=T.
23.213
上面这种包含一个atom,然后跟着一个元素的tuple叫做tagged tuple。 同时,在patten matching时,我们可以用通配符“_”来忽略相应位置上的元素:
> PreciseTemp={celsius, 23.213}.
{celsius,23.213}
>{_,T}=PreciseTemp.
{celsius,23.213}
> T=T.
23.213
如此,我们忽略了celsius这一atom,使其变成了the don't care one。此外,正如上面第3点描述,我们可以把这个被忽略的变量写成“_ignored”, 或者"_babycat", 或者“_trashed”都行;反正以下划线开始,就已经表示它被放弃了。
10、lists可能翻译成列表更确切。lists是由一系列的cons cells组成的,这是它与tuples的最大区别。这里的cons 其实就是constructor。
我们用一个较为形象的例子说明。比如,一个lists p = [1,2,3],事实上,是由以下一个步骤构建的:
p1 = [1, p2]
p2 = [2, p3]
p3 = [3, p_to_empty_list]
p = p1
或者,换一种方式,我们用cons operator “|”(也就是前面讲的constructor)来描述这一过程:
p = [1 | [2 | [3]]].
11、lists是可以做“加法”和“减法”的,用“++”和"--"。
> [1,2,3,4,5]--[3,4].
[1,2,5]
> [1,2,5]++[6,7].
[1,2,5,6,7]
12、我们在tuples里面用到的patten match在lists中同样适用:
>NewList=[1,2,3,4].
[1,2,3,4]
> [Head|Tail]=NewList.
[1,2,3,4]
> Head=Head.
1
> Tail=Tail .
[2,3,4]
13、lists comprehension是类似集合定义的一个存在,下面两个例子比较典型:
> [X+Y || X <-[1,2], Y<-[3,4]].
[4,5,5,6]
> Weather=[{toronto,rain},{montreal, storms},{london, fog},{paris,sun},{boston,fog},{vancouver,snow}].
[{toronto,rain},
{montreal,storms},
{london,fog},
{paris,sun},
{boston,fog},
{vancouver,snow}]
> FoggyPlaces=[X||{X,fog}<-Weather].
[london,boston]
我们定义{Z=X+Y:X∈{1,2},Y∈{3,4}},然后罗列出Z。不过,这里把“:”换成了“||”,然后把“∈”换成了“<-”;这里,我们不妨把“<-”当做是“=”来看。另一个例子也是类似。
14、Erlang 中并没有字符串类型,如果list的每个element都是在Latin-1(ISO-8859-1)中的,那么,模拟器就会把他打印出来;如果有任何成员不是可打印的,会当做一般list对待。比如
> [97,98,99].
"abc"
> [97,98,99,4,3].
[97,98,99,4,3]
> I= $s.
115
这Erlang中,$符号用来取字符的ASCII码值。
Erlang最初的设计几乎没考虑过要处理字符串,所以,字符串处理比较困难,是把它应用到非通信设备领域的重要障碍。但是,实际应用中,不使用字符串又是不可能的。这种情况下,“能实现”可能是更实际的要求,所以也就有了使用lists(链表)这样的结构来操作字符串的应用;相对而言,binary string可能比lists更加的适合操作字符串,它的结构更接近C里面的array,或者C++里面的string,会在下一课binary专题里面讲到。
Erlang第一课----基本变量的更多相关文章
- 【C语言探索之旅】 第三部分第一课:SDL开发游戏之安装SDL
内容简介 1.课程大纲 2.第三部分第一课: SDL开发游戏之安装SDL 3.第三部分第二课预告: SDL开发游戏之创建窗口和画布 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会 ...
- vue.js学习(第一课)
学习资料 来自台湾小凡! vue.js是javascript的一个库,只专注于UI层面,核心价值永远是 API的简洁. 第一课: 不支持IE8. 1.声明式渲染: el元素的简称 element : ...
- Magento学习第一课——目录结构介绍
Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...
- <-0基础学python.第一课->
初衷:我电脑里面的歌曲很久没换了,我想听一下新的歌曲,把他们下载下来听,比如某个榜单的,但是一首一首的点击下载另存为真的很恶心 所以我想有没有办法通过程序的方式来实现,结果还真的有,而且网上已经有有人 ...
- 留念 C语言第一课简单的计算器制作
留念 C语言第一课简单的计算器制作 学C语言这么久了. /* 留念 C语言第一课简单的计算器制作 */ #include<stdio.h> #include<stdlib.h ...
- MFC学习-第一课 MFC运行机制
最近由于兴趣爱好,学习了孙鑫的MFC教程的第一课.看完视频了,自己便用visual studio 2010尝试了MFC编程,其中遇到了一些问题. 1.vs2010不像vs6.0那样可以新建一个空的MF ...
- OpenCV 第一课(安装与配置)
OpenCV 第一课(安装与配置) win10,opencv-2.4.13, 安装, vs2013, 配置 下载安装软件 官网OpenCV下载地址下载最新版本,我下载的是opencv.2.4.13,然 ...
- 【第一课】神奇的Context
初学Android的困惑 初学Android跳转页面的时候,往往教程里是这么写的: Intent intent = new Intent(); //MyActivity就是当前的Activity,It ...
- CodeIgniter框架入门教程——第一课 Hello World!
本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...
随机推荐
- Sql注入截取字符串常用函数
在sql注入中,往往会用到截取字符串的问题,例如不回显的情况下进行的注入,也成为盲注,这种情况下往往需要一个一个字符的去猜解,过程中需要用到截取字符串.本文中主要列举三个函数和该函数注入过程中的一些用 ...
- WinForm 快捷键设置
一.窗体快捷键,只在窗体上有效果 首先在form_load的时候写上this.KeyPreview=true;//表示窗体接受按键事件 然后如下 private void Frm_KeyDown(ob ...
- 12SpringMvc_在业务控制方法中写入普通变量收集参数
这篇文章讲的是jsp页面不是会传一些参数到Action中,那么Action怎么去接受这个数据呢? 方案: 案例结构如下:
- Integrating JAD decompiler into JDeveloper(转)
原文地址:Integrating JAD decompiler into JDeveloper In JDeveloper, when debugging or otherwise navigatin ...
- pandas 前后行操作
一.前后行满足条件 问题: 各位老师好,我有一个dataframe 产品 数据1 数据2 A 1 2 B 4 5 C 6 3 我想找出比如这一行数据1>数据2 AND 数据1的上一行3 AND ...
- Easyui Combotree问题及其相关
Easyui的setValue方法无效 今天在开发项目的时候,遇到第一个很奇怪的问题:EasyUI的setValue方法无效. $('#department_parent').combotree('s ...
- 解决vs2013使用Git推送到远程仓库报错的问题
在上一篇<让PowerShell使用Git>中可以让PowerShell运行Git命令,那么就开始使用. 1.从远程仓库克隆项目 GitHub和Git.oschina都是不错的免费托管网站 ...
- Self Organizing Maps (SOM): 一种基于神经网络的聚类算法
自组织映射神经网络, 即Self Organizing Maps (SOM), 可以对数据进行无监督学习聚类.它的思想很简单,本质上是一种只有输入层--隐藏层的神经网络.隐藏层中的一个节点代表一个需要 ...
- 微软发布独立Android模拟器 为开发者提供测试
微软发布了 Visual Studio 2015 正式版,除了免费的社交版之外,另外也有付费的专业版.这套工具除了提供 Windows 应用程序的整合环境之外,你也可以利用它来开发 Android 程 ...
- Android杂谈--Activity、Window、View的关系
转自 http://www.cnblogs.com/loulijun/archive/2012/02/09/2344681.html Activity其实更像一个控制单元,控制window上显示的Vi ...