`
zoutm
  • 浏览: 96397 次
  • 性别: 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 programming

    1. **Erlang语言基础**:Erlang是瑞典电信设备制造商Ericsson为解决实时通信系统需求而开发的。它采用函数式编程范式,强调纯函数和不可变数据,以及模式匹配和递归等特性。编程+Erlang.pdf可能会详细介绍Erlang的...

    Erlang and OTP实战

    2. **Erlang语言基础**:Erlang作为一种功能强大的编程语言,其基础知识是掌握整个平台的关键。这可能包括Erlang的核心特性,如轻量级进程、消息传递、模式匹配和函数式编程范式。 3. **TCP-based RPC service**:...

    erlang中文基础教程

    顺序编程是 Erlang 编程语言的基础,用户可以使用 Erlang Shell 编写和运行顺序编程代码。顺序编程是指按照顺序执行的编程方式,用户可以使用各种运算符号和函数来实现不同的计算任务。 3. 模块和函数 模块和函数...

    erlang实战IP查询服务

    - **Erlang语言基础**: 至少熟悉Erlang的基础语法和编程思想。 - **Web开发基础**: 了解HTTP协议的工作原理,熟悉JSON数据格式。 - **项目管理能力**: 能够合理规划项目进度,具备良好的文档编写习惯。 通过以上...

    英雄远征源码[erlang]

    1. **Erlang语言基础** Erlang是一种动态类型的并发编程语言,源于瑞典电信设备制造商Ericsson的需求,旨在创建高效、可靠和可维护的软件。它支持轻量级进程(process)、消息传递以及热代码升级,这使得Erlang特别...

    erlang ranch实现的游戏tcp服务器

    1. **Erlang语言基础**:Erlang是一种函数式编程语言,以其并发和分布式特性著名,特别适合处理大规模的并发连接。了解Erlang的基本语法、模式匹配、进程(process)模型以及错误处理是必要的。 2. **Ranch库**:...

    erlang 中文基础教程

    这展示了Erlang语言强大的计算能力。 当需要退出Erlang Shell时,可以通过两种方式实现:一是使用`Ctrl+C`组合键,系统会暂停并询问用户下一步操作;二是直接输入`halt().`,这是一种更为优雅的退出方式,它会直接...

    Erlang/OTP 中文手册(R11B)

    Erlang语言基础 Erlang语言以其独特的语法和特性而闻名,包括: - **函数式编程**:Erlang是纯函数式语言,强调无副作用的函数调用和不可变数据。 - **并发处理**:Erlang通过轻量级进程(processes)实现并发,...

    erlang open poker 最好的入门程序源码

    1. **Erlang语言基础**:源码中会包含Erlang的基本语法,如模块(module)、函数(function)、过程(process)和模式匹配(pattern matching)等。通过阅读源码,你可以了解到如何组织Erlang代码,以及如何定义和...

    Erlang编程语言

    在《Erlang编程指南》这本书中,作者Francesco Cesarini和Simon Thompson深入浅出地介绍了Erlang语言的基础和高级特性,涵盖了从进程通信到并发设计模式,再到OTP框架的使用。通过学习这本书,读者可以全面理解...

    Erlang趣学指南

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

    erlang压缩包.rar

    Erlang是一种高级编程语言,特别适用于并发、分布式和实时系统。它由瑞典电信设备制造商Ericsson开发,用于构建大规模、高可用性的电信系统。在本文中,我们将深入探讨如何在 CentOS 7 64位操作系统上安装和配置...

    两本erlang电子书

    而《Erlang程序设计》则注重基础,确保读者扎实掌握语言基础。通过阅读这两本书,你可以系统地学习Erlang的理论知识,并获得实际操作经验,从而在构建高并发、分布式系统时游刃有余。 Erlang的独特之处在于其对并发...

    centos6下离线安装erlang所需要的所有rpm包

    在Linux系统中,Erlang是一种强大的编程语言和并发平台,尤其在分布式计算、实时系统以及高可用性软件开发领域有着广泛的应用。对于那些没有网络连接或者网络环境不稳定的情况,离线安装Erlang就显得尤为重要。在...

    Erlang基础知识集锦

    Erlang语言的特性包括: - 并发性:支持大量并发线程,无需操作系统的并发机制支持。 - 分布式:Erlang系统由多个节点组成网络,每个处理器通常被看做一个节点。 - 健壮性:具有基本错误检测能力,可构建容错系统。 ...

Global site tag (gtag.js) - Google Analytics