`
zoutm
  • 浏览: 95218 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多

前面一篇high level地介绍了Erlang语言在并发编程上的特点。本文详细介绍Erlang的基本语法:

 

在Erlang语法中,跟java或c有相当大的差异,跟以往我学过的任何语言(c,pasacal,vb,delphi,php,groovy,python)有巨大的不同,前面的语言要么是基于过程的,或者基于面向对象的,而Erlang是面向消息的或者说是基于函数的。

 

在语法要素方面,变量有两种状态,要么绑定(已赋值),要么未绑定,一旦被赋值,就不能再赋值,任何变量都可以看成是不可变的,有点像java中的final变量。

变量类型:

1.整型, 比如 1,2,3

2.浮点型, 比如 1.0,3.0e12

3.字符串,严格意义讲是整型变量的list。"abc" 和 [97,98,99]一样

4.原子(atoms),就像字面量,由小写字母开头的字符组成,也可以用单引号扩住,以便于定义以大写字母开头的字符列表,有点像java中枚举类型,c中的常量,他们是全局有效的,比如abc, color,name,red等等

5.元组(tuple),像c的struct,像java的纯值对象,像js对象(或者json对象),他是由基本的整型,浮点型,原子,项,及元组和列表等类型组成的附和类型。不要和python中的tuple混淆,他们之间完全不一样。

6.列表(List),就像java中LinkedList或python中的list,大小可变的,列表由两部分组成头和尾,[H|T],H是列表头,T代表列表尾,列表尾要求是一个列表。列表的定义是用[]形式表示。

7.引用(reference),和java,C++及大多数面向对象语言中的引用是一样的,比如,X={1,3},Y=X,X和Y都是只向相同的数据,变没有拷贝一份出来。

8. 匿名变量,匿名变量用“_”表示,主要用在赋值中剔除想用的值,比如 {x,_,Y}={1,3,5},可以只取元组中的第一个值和第3个值并赋值给x,y

我们可以看出来,上面这些类型都是跟数据相关的,我们的消息都应该由这些数据类型组成。

9.二进制(binarry),一个二进制数是一个字节序列。二进制数为二进制数据的存贮提供了一种高空间效率的方法

10.pid,我们知道,Erlang语言的特点是要基于进程的,进程之间的通信是基于消息的,要发消息必须知道对方的进程id

11.端口(port),端口用于与外界通信,由内置函数(BIF3)open_port来创建。消息可以通过端口进行收发,但是这些消息必须遵守所谓“端口协议” (port protocol)的规则

12. 匿名函数(fun)——匿名函数是函数闭包4,由表达式“fun(…)  -> … end.”来创建

 

变量赋值(模式匹配 Pattern Matching):

严格意义或者官方资料上,没有赋值的说法,只是模式匹配的提法很容易与正则表达式容易混在一起,而实际上用赋值的方式理解这种模式匹配还是容易理解的。比如{X,Y}={1,3},变量X被赋值为1,Y被赋值为3,但是,如果X或者Y任何一个变量已经赋过值都会抛错。

模式匹配涉及两个概念:Pattern 和 Term

pattern可以看成是各种类型变量,而Term可以看成是一个都已经赋值过的变量或常量组成,进行模式匹配相当于python中的元组赋值。

以下是模式匹配的例子:

 

 Pattern                  Term                                                 Result
{X,abc}                   {123,abc}                                        成功 X → 123
{X,Y,Z}                    {222,def,"cat"}                               成功 X → 222, Y → def,Z → "cat"
{X,Y}                       {333,ghi,"cat"}                               失败—the tuples have different shapes
X                               true                                                成功 X → true
{X,Y,X}                   {{abc,12},42,{abc,12}}                 成功 X → {abc,12}, Y → 42
{X,Y,X}                   {{abc,12},42,true}                          失败—X cannot be both {abc,12} and true
[H|T]                       [1,2,3,4,5]                                         成功 H → 1, T → [2,3,4,5]
[H|T]                        "cat"                                                成功 H → 99, T → "at"
[A,B,C|T]                  [a,b,c,d,e,f]                                      成功 A → a, B → b,C → c, T → [d,e,f]

分享到:
评论

相关推荐

    Erlang趣学指南

    这是一本讲解Erlang编程语言的入门指南,内容通俗易懂,插图生动幽默,示例短小清晰,结构安排合理。书中从Erlang的基础知识讲起,融汇所有的基本概念和语法。 这是一本讲解Erlang编程语言的入门指南,内容通俗易懂...

    Erlang / OTP并发编程实战

    本书除了全面介绍Erlang语言和OTP平台的基础知识外,还通过一系列实用案例引领你深入了解OTP的高级特性,一步步构建一个大型生产系统,并加以优化和完善。三位作者在Erlang领域拥有极其丰富的实战经验,细致入微地...

    Erlang 教程中文版 - 极客学院

    Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使 用它来开发电话和通信应用程序。 本教程目的是告诉你如何快速高效地学习 Erlang 语言。教程中只讲述了 ...

    erlang-21.3-1.el7.x86_64.rpm

    erlang-21.3-1.el7.x86_64.rpm rabbitmq基础语言环境。

    erlang-22.1.4-1.el7.x86_64.rpm

    erlang-22.1.4-1.el7.x86_64.rpm rabbitmq基础语言环境。

    erlang-21.3.7.1-1.el7.x86_64.rpm

    erlang-21.3.7.1-1.el7.x86_64.rpm rabbitmq基础语言环境。

    Erlang程序设计【高清扫描版】【完整书签】

    书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...

    Erlang程序设计中文版(完整书签)

    书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...

    Erlang程序设计

    本书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发...

    学到一些Erlang,以造福所有人!Learn You Some Erlang for Great Good!

    本书是为那些具有命令式语言编程基础知识(例如C / C ++,Java,Python,Ruby等)并且可能会或可能不知道函数式编程(例如Haskell,Scala,Erlang)的人们学习Erlang的一种方法。 ,Clojure,OCaml等)。

    Erlang程序设计中文版和英文原版

    《Erlang程序设计》是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。《Erlang程序设计》将帮助读者在消息...

    erlang-21.3.7.1-1.el6.x86_64.rpm

    rabbitmq安装基础语言erlang适配版本rabbitmq-server-3.7.3-1.el6

    ErlangOTP并发编程实战(高清PDF版)

    书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...

    erlang-20.3.8.22-1.el7.x86_64

    erlang-20.3.8.22-1.el7.x86_64.rpm rabbitmq基础语言环境。

    alpine-erlang-builder:带有最新Erlang版本的最新Alpine映像,用于分阶段构建

    该Dockerfile提供了一个很好的基础构建映像,可用于Erlang应用程序的多阶段构建。 它带有Alpine,Erlang和Rebar的最新版本。 它旨在与应用程序一起使用或为您的应用程序创建发布映像,并允许您避免交叉编译发布。 ...

Global site tag (gtag.js) - Google Analytics