Erlang入门(一)

致谢

感谢Tony.wang,在我学习Erlang过程中,曾看过一篇Erlang入门,排版清晰,阅读舒适,可惜只有一篇。

希望能继承这样的布局风格继续写下去。

正文

因为前面的Erlang数据结构部分暂时不需要用到IDEA,所以先使用erlang shell进行演示。

接着上篇文章安装完Erlang之后,我们打开命令行,键入erl,进行后面的Erlang学习。

开始之前

因为在后文的例子中我们会频繁的用到Erlang Shell,所以这里先介绍Erlang的Shell。

所谓的Erlang Shell,其实类似于其他编程语言的REPL

REPL对于学习一门新的编程语言具有很大的帮助,因为它能立刻对初学者做出回应。

我们通过在命令行里键入erl,并看到了Eshell以及版本号回显就成功进入到Erlang Shell。

记住,在Shell中我们也遵循Erlang的基本语法规则,以句号结束一段执行语句。

要安全退出Shell的话可以使用q().语句,不要丢掉最后的句号。q().init:stop()命令在shell 里的别名。

当然,我们可以使用命令erlang:halt()立即停止系统。

整数运算

通过上图的结果可以看出,Erlang的算术运算是遵循标准算术表达式法则的。

Erlang采用不定长的整数来进行整数的算术演算,因此不用担心溢出,例如:

赋值运算

我们通过上面的语句对X进行赋值,记住,Erlang中的变量是以大写开头的。

我们想要知道一个变量的值,只需要在Shell中输入变量名。

不像其他语言一样,Erlang的变量是不可以被重复赋值的,也就是说,我们对上图的X再进行赋值的时候,就会出现错误。

记住,Erlang中的变量分为自由变量和绑定变量,还未执行赋值操作的是自由变量,可以进行赋值,而已经被赋值的变量称为绑定变量,绑定变量无法再次被赋值。

另外,像X=12345.这样的语句,在Erlang中称为模式匹配,赋值只是模式匹配的效果之一,模式匹配是Erlang的强大特性之一,我们会在后文提到。

数据类型

浮点数

通过上图例子,简单看看浮点数的运算。

原子

原子以小写字母开头,后接一串字母、数字、下划线(_)或at(@)符号,在Erlang里,原子被用于表示常量值,一个原子的值就是它本身。

元组

如果想把一些数量固定的项目归组成单一的实体,我们就会使用元组,他长得就像下面的样子。

一般的,我们倾向于在元组首位通过原子定义这个元组是什么。

这是通过模式匹配,我们取到了元组中的值。简单的来说,等号两侧的元组必须有相同数量的元素,而且两侧的对应元素必须绑定为相同的值,模式匹配成功后,变量便会被赋予对应位置上的值。

列表

列表被用来存放任意数量的事物。创建列表的方法是用中括号把列表元素括起来, 并用逗号分隔它们,他长得就像下面的样子。

列表的第一个元素被称为列表头(head)。假设把列表头去掉,剩下的就被称为列表尾(tail)。

在Erlang编程中,我们会非常频繁的在函数中看到[H|T]这样的模式匹配情况,他的意思是,去除列表头元素赋值到H,剩下的列表作为T。

字符串

严格来说,Erlang里没有字符串。要在Erlang里表示字符串,可以选择一个由整数组成的列表或者一个二进制型。当字符串表示为一个整数列表时,列表里的每个元素 都代表了一个Unicode代码点(codepoint)。通俗的来说,Erlang用整数列表储存字符串。

可以用“Hello”这样的用双引号引起来的字符串字面量来创建这样一个整数列表。

在表达式2里,列表[1,2,3]在打印时未做转换。这是因为1、2和3不是可打印字符。

在表达式3里,列表里的所有项目都是可打印字符,因此它被打印成字符串字面量。

表达式4和表达式3差不多,区别在于这个列表以1开头,而1不是可打印字符。因此,这个列表在打印时未做转换。

模式匹配

我们在上方大量提到了模式匹配,那么现在我们就来复习一下模式匹配。

在Shell中,我们可以使用f().语句使Shell忘记所有的绑定变量。

引用

本文较多地方引用了《Erlang程序设计(第二版)》中的内容,这是一本非常适合初学者的文章,笔者强烈推荐!

本作品采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0)进行许可,转载时请注明原文链接,图片在使用时请保留全部内容,可适当缩放并在引用处附上图片所在的文章链接。

最后更新于