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第一课----基本变量的更多相关文章

  1. 【C语言探索之旅】 第三部分第一课:SDL开发游戏之安装SDL

    内容简介 1.课程大纲 2.第三部分第一课: SDL开发游戏之安装SDL 3.第三部分第二课预告: SDL开发游戏之创建窗口和画布 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会 ...

  2. vue.js学习(第一课)

    学习资料 来自台湾小凡! vue.js是javascript的一个库,只专注于UI层面,核心价值永远是 API的简洁. 第一课: 不支持IE8. 1.声明式渲染: el元素的简称 element : ...

  3. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

  4. <-0基础学python.第一课->

    初衷:我电脑里面的歌曲很久没换了,我想听一下新的歌曲,把他们下载下来听,比如某个榜单的,但是一首一首的点击下载另存为真的很恶心 所以我想有没有办法通过程序的方式来实现,结果还真的有,而且网上已经有有人 ...

  5. 留念 C语言第一课简单的计算器制作

    留念 C语言第一课简单的计算器制作 学C语言这么久了.  /* 留念 C语言第一课简单的计算器制作 */   #include<stdio.h>  #include<stdlib.h ...

  6. MFC学习-第一课 MFC运行机制

    最近由于兴趣爱好,学习了孙鑫的MFC教程的第一课.看完视频了,自己便用visual studio 2010尝试了MFC编程,其中遇到了一些问题. 1.vs2010不像vs6.0那样可以新建一个空的MF ...

  7. OpenCV 第一课(安装与配置)

    OpenCV 第一课(安装与配置) win10,opencv-2.4.13, 安装, vs2013, 配置 下载安装软件 官网OpenCV下载地址下载最新版本,我下载的是opencv.2.4.13,然 ...

  8. 【第一课】神奇的Context

    初学Android的困惑 初学Android跳转页面的时候,往往教程里是这么写的: Intent intent = new Intent(); //MyActivity就是当前的Activity,It ...

  9. CodeIgniter框架入门教程——第一课 Hello World!

    本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...

随机推荐

  1. Android 动态加载 (二) 态加载机制 案例二

    探秘腾讯Android手机游戏平台之不安装游戏APK直接启动法 重要说明 在实践的过程中大家都会发现资源引用的问题,这里重点声明两点: 1. 资源文件是不能直接inflate的,如果简单的话直接在程序 ...

  2. UIImageJPEGRepresentation和UIImagePNGRepresentation

    UIImageJPEGRepresentation方法在耗时上比较少 而UIImagePNGRepresentation耗时操作时间比较长 -(void)imagePickerController:( ...

  3. prepareStatement createStatement

    preparedstatement具备很多优点,开发者可能通常都使用它,只有在完全是因为性能原因或者是在一行sql语句中没有变量的时候才使用通常的statement. preparedstatemen ...

  4. kprobe原理解析(一)

    kprobe是linux内核的一个重要特性,是一个轻量级的内核调试工具,同时它又是其他一些更高级的内核调试工具(比如perf和systemtap)的“基础设施”,4.0版本的内核中,强大的eBPF特性 ...

  5. Java中的Random()函数

    今天在做Java练习的时候注意到了Java里面的一个随机函数——Random,刚开始只是知道这个函数具有随机取值的作用,于是上网搜索了资料一番,做了一下一些关于Random函数的总结:   Java中 ...

  6. html的解析

    Web页面运行在各种各样的浏览器当中,浏览器载入.渲染页面的速度直接影响着用户体验 简单地说,页面渲染就是浏览器将html代码根据CSS定义的规则显示在浏览器窗口中的这个过程.先来大致了解一下浏览器都 ...

  7. 房产企业如何借助K2 BPM脱颖而出?

    点击这里,查看完整版房地产行业的流程管理解决方案.

  8. SpringMVC Controller介绍(转)

    SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...

  9. gethostbyname 亲测可用

    建立Socket链接的时候需要IP地址,但是只有域名怎么办,gethostbyname就是一个将域名转换为IP的函数: #include <netdb.h> struct hostent ...

  10. Lenovo GTX960M 配置CUDA

    文章是出自我的原创,是写在新浪博客里面的:http://blog.sina.com.cn/s/blog_13b7eb5b20102wvxw.html 首先,软件的版本你选择很重要,我们配置了两天才成功 ...