`
wx1568905209
  • 浏览: 25145 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

erlang语言的基础概念知识

 
阅读更多

   相信很多朋友都知道,erlang的强大和高效。那么接下来分析一下erlang的一些简单的基础知识。

    启动和退出shell:

    首先,从启动erlang shell说起,启动shell,只需在vim编辑器中运行erl命令,就能成功启动shell。如下图所示:

    当看到这种代码时,就意味着shell已经成功开启。不过在输入表达式时一定要以英文状态下的句号(.)结尾;同时需要了解shell只会保留最近20条求值结果;退出shell需要使用q().或者halt().命令,同样的也需要以英文状态下的句号结尾。如下图:

    看到这些代码就证明已经成功退出了shell。q().命令是退出当前shell进程;halt().命令是结束所有进程。区别还是很大的。

    数据类型及运算:

    erlang数据类型有:数值、二进制串/位串、原子、元组、列表(和字符串)、唯一标识(pid、端口、引用)、Fun函数。erlang中的数据通常被称作项式。erlang的数值运算在必要的时候会自动将整型转换成浮点型。比如除法运算,在erlang编程中除法运算得到结果都是浮点型。想得到整型可以使用整除命令div——4 div 2,得到结果为2。

 二进制串就是无符号8位字节的序列,用于存放和处理数据块;位串是广义的二进制串,长度不必是8位的整数倍。

 原子是一种仅由字符序列来标识的特殊字符串常量。Erlang中原子作为标签,无需事先声明,可以随意创建并随处使用各个新的原子。Erlang中常用的原子:true/false用于布尔运算、ok用于那些返回值没有实际意义,仅通过副作用发挥作用的函数、undefined用作标识未知量的占位符。

 Erlang的一个标准约定:用原子作为第一个元素来标记元组数据的类型。称为标记元组。元组的元素项没有名称,只有编号。注意:元组针对的是定长序列。要处理边长序列,需要用列表。

 列表天然遵循引用透明性——其基本思想是被名称所引用的值不可更改。Erlang的单次赋值造就了引用透明性。列表添加元素[1 | []] |左侧是要添加的元素,左侧也可是多个元素。也可用++   [1,2] ++ [3,4] 左侧列表的长度决定了++运算符的耗时。

 Erlang中的双引号字符串就是列表,其元素就是该字符串中的各字符的数值编码所对应的整数。所有处理列表的方法都可以对字符串使用。

 Erlang被称为函数式语言,可以像处理数据一样处理函数。函数可以称为别的函数的输入,也可以是别的函数的求值结果,还可以把函数存在数据结构中供后续调用。这种将函数包装成数据的对象称为fun函数。

 项式的比较:

 erlang中的项式比较:数值小于原子、元组小于列表、原子即小于元组也小于列表(字符串也是列表)。

 任意两个项式都可以比较,结果总是确定的。比较运算符看起来绝对不能像箭头!小于或等于号=<  大于或等于>=  相等比较=:=  不完全相等=/=

 看似相等的整数和浮点数被判为不相等 2 =:= 2.0 结果为false。按数学法则对数值进行比较时,应该改用算术相等运算符==,否定式写作/=。针对浮点数的判断总是会有些微小的舍入误差,涉及浮点时最后使用<,>,=<,>=进行比较。

 ==的正确性是得不到保障的,除了算术运算意外,它基本上总有问题。

 解读列表:

 列表一般是由空表和所谓的列表单元共同构成,这些单元各自携带一个元素挨个儿挂接到现有的列表的顶部,从而在内存中星城一个单链表。列表主要存放临时数据、编排中间结果、或是用作字符串缓冲。

 列表分为严格列表和非严格列表。 严格列表的尾部是以一个空表结尾。非严格列表结尾不是以空表结尾,而且是堆叠列表单元而成的列表。 很多函数要求输入参数必须是严格列表,而非严格列表在函数遍历列表时不是以正常的空表结尾,就会导致崩溃(或者抛出异常)。

 变量:

 赋值之后,变量没有被使用时,往往会触发编译警告,如果仅仅是为了提高程序可读性,可以在变量名前加上下划线,编译器不会报警,同时未被使用的变量还会被优化掉,不会带来额外的成本。

 Erlang的变量被严格的限定只能接受单次赋值。

 Erlang中的所有副作用都可被视作消息。

 函数子句、保护式与表达式:

 子句保护式由关键字when开始到->箭头结束,其中可以包含一个或多个由逗号分隔的判定,仅当所有判定都为true时该子句才会被选中。

 包括此类类型判定在内,能用在保护式中的操作十分有限,大部分运算符都可以用(+,-,*,/,++等),部分内置函数也可以用(self()),但是不能调用自定义的函数或其他模块中的函数。原因:①效率——子句选择必须足够快;②这些函数可能带有副作用。erlang中的副作用都可被视作消息。

 Erlang的变量是无需声明的,按需取用即可。但是要求同一子句内的变量不能重名。

 if表达式时case表达式的一种缩略形式,它不针对特定的值做分之判断也不含模式。

 匿名fun函数要发挥作用,就必须与变量绑定,或者作为参数被传给其他函数。本地fun函数短暂的有效期,不适合长期保存,若是将它们以消息的形式发给别的erlang系统,则接收方必须持有相同版本的代码才能顺利调用这些fun函数,这种情况应该使用远程别名。

 异常:

 异常到底是什么?你可以将之认为是函数的另一种返回形式,区别在于它不仅会返回至调用者,还会返回到调用者的调用者,并一路向上,直至被捕获或抵达进程调用的起点。异常分为三类:error、exit、throw。

 throw和exit都是常用函数,因此会被自动导入;调用时无须加erlang:前缀。

 catch...end之间子句的模式有些特殊——它们可以用冒号作为异常的类别和被抛出的项式的分隔符。如果省略类别,默认为throw。

 需要注意的是: 一旦进入catch部分,代码就不再受到保护了,catch子句中抛出的新的异常,会传播到try表达式之外!

 当需要区分正常情况和异常情况并做出不同的处理时,可以使用try的复杂形势。

 可以给任意try表达式加上一个after段,其作用在于确保某段具有副作用的代码的执行。

 栈轨迹是异常发生那一刻位于栈的顶部的那些调用的逆序列表(最后一个调用位于列表最前)。

 对于throw,得到的结果就是被抛弃的项式;对于exit,得到的是包含退出原因的标记元组;而对于error,得到的是一个包含异常本身和栈轨迹的标记元组。

转载于:https://my.oschina.net/u/3395699/blog/870335

分享到:
评论

相关推荐

    Erlang基础知识集锦

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

    Erlang趣学指南

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

    erlang压缩包.rar

    Erlang是一种高级编程语言,特别适用于并发、分布式和...了解了这些基础知识后,你可以开始编写Erlang程序,构建自己的并发应用,体验Erlang带来的高效和可靠性。记得在实践中不断探索,Erlang的世界充满了无限可能。

    两本erlang电子书

    第一部分介绍Erlang语言的基础知识,包括其语法特性、并发模型和错误处理策略。读者将了解Erlang的模式匹配、函数式编程概念以及如何利用轻量级进程进行并发编程。第二部分深入探讨OTP,讲解其设计原则和组件,如...

    Erlang and OTP实战

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

    erlang书籍

    通过阅读这些书籍,读者可以系统地学习Erlang语言,从基础知识到高级技术,再到实战应用。Erlang的并发模型和错误恢复机制使得它在构建高可靠性系统中独树一帜,如电话交换系统、分布式数据库、实时通信软件等。同时...

    erlang资源

    Erlang是一种面向并发的、函数式编程语言,由瑞典...这两本书结合阅读,将为初学者提供一个全面的Erlang学习路径,从基础语法到高级并发编程技巧,有助于深入理解Erlang语言及其在构建高并发、分布式系统中的强大能力。

    erlang程序设计中文版

    Erlang语言特别适合需要并发处理和高可靠性的场合,例如电信行业、实时交易系统、云服务等。 Erlang的设计理念来自于对并发结构和并行处理需求的认识。CPU多核化和云计算的发展趋势要求程序设计语言能够有效地利用...

    erlang programming

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

    Erlang Programming 导读.pdf

    - **基础准备**: 如果之前没有接触过任何编程语言,建议先学习一些基础知识,如 C 语言或 Python,了解计算机的基本工作原理和编程思维。 - **官方资源**: 通过阅读《Programming Erlang》这本书来深入了解 Erlang ...

    Programming Erlang.pdf

    从目录可以看出,本书首先介绍了Erlang的基础概念和安装指南,随后逐步深入到更高级的主题和技术细节。通过这种方式,读者可以从零开始学习Erlang,并逐步掌握其核心功能和编程技巧。 ### 7. 特别准备 文件中多次...

    Pragmatic.Programming.Erlang.2nd.Edition

    1. **核心语言和框架基础:**第二版涵盖了Erlang的核心概念和技术细节,包括语法、数据类型、流程控制、函数式编程等基础知识。 2. **社区项目介绍:**书中还详细介绍了Erlang社区中重要的开源项目,如构建工具rebar...

    erlang-examples-2.0.pdf

    整份文档是对Erlang学习者的一份宝贵的资料集合,通过阅读和实践这些示例,读者不仅能够掌握Erlang语言的基础,还能够了解如何将这些概念应用于复杂系统的开发之中。这份文档提供的完整且有用的源代码示例,如make、...

    Erlang编程

    作者在Erlang语言的开发中扮演了核心角色,因此他对Erlang的理解深入且独到。这本书内容浅显易懂,非常适合初学者,目的是让读者能够快速理解并开始编写Erlang程序。 #### 关键标签 - **Erlang编程**:指的是使用...

    Erlang资料大全

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。这个压缩包“Erlang资料大全”显然是为那些想要学习或深入理解Erlang的人准备的,包含中文基础...

    Programming Erlang second edition

    本书的内容不仅仅是对Erlang语言的学习,它还深入探讨了并发编程的设计模式和最佳实践。Erlang的并发模型不同于传统的线程模型,它不是共享内存而是通过消息传递,这有助于避免多线程编程中的锁竞争和状态共享问题。...

    图书:Erlang编程

    《Erlang编程》是一本深入探讨Erlang语言的图书,主要面向对并发处理、分布式系统和高可用性有需求的开发者。Erlang是一种为构建大规模并发系统而设计的函数式编程语言,它源自爱立信,以其在电信行业的成功应用而...

    Erlang程序设计_第2版_含中文版英文版_含源码_(Programming_Erlang)_Joe.Armstrong

    书中首先介绍了Erlang的基础知识,包括其语法结构、模式匹配、函数式编程的特点以及过程(process)的概念。Erlang的过程与传统的进程不同,它们是轻量级的,并且具有内置的并发支持,这使得Erlang在处理大量并发...

    Erlang程序设计中文版

    通过阅读《Erlang程序设计中文版》并结合提供的完整书签,学习者可以逐步构建起对Erlang语言的全面理解,从而在实际工作中有效地运用Erlang解决复杂的问题。无论你是初学者还是有经验的开发者,这本书都能为你提供...

Global site tag (gtag.js) - Google Analytics