erlang
cloveses
这个作者很懒,什么都没留下…
展开
-
Erlang 基础编程套路
有一段时间没有写 Erlang 程序了,近日有个小伙伴要帮忙,给了我几个小练习,让我写写看。虽然写得有点慢,毕竟还是完成了。突发灵感,Erlang有没有什么“编程套路”呢? 初学 Erlang 者大部分都感叹“太逆天了”,个人认为,掌握Erlang 编程逻辑两个基本点就是模式匹配和递归思想。而递归思想在任何一种编程语言中都是存在的,也是解决问题最简便的思维方式。 就着这个练习,其实之前好像...原创 2018-04-08 08:14:51 · 540 阅读 · 1 评论 -
Erlang函数与模式匹配(2)
在《Erlang函数与模式匹配》中介绍了函数的定义方法与模式匹配在函数定义中的基本应用,本节继续深入这个主题。 一、元组在函数参数中的模式匹配 如果你需要定义一个将厘米转换为米的函数,最简单的就是: convert(X) -> X / 100. 可是,如果用户输入了长度单位是分米的话,函数无法分辨,结果一定是悲剧。为了不发生悲剧,我可以这样定原创 2017-10-20 15:31:21 · 367 阅读 · 0 评论 -
Erlang函数与模式匹配
Erlang 是一种函数式编程语言,函数是其编程的基本单位,并且可以使用变量进行传递。本节介绍Erlang函数的定义方法和模式匹配在函数中的录用: 一、单子句函数(函数体只包含单表达式) 下面是一个基本的函数定义形式:play(X) -> X. 该函数定义包括三个部分: 1.函数头:由函数名和被括号括起来的模式构成。函数名是一个原子,模式也可以理解为函原创 2017-10-12 09:57:59 · 1458 阅读 · 0 评论 -
Erlang 并发编程基础之一
Erlang 并发编程的基础原语主要有以下三个:1.发送消息Pid ! Message该语句实现的功能是向Pid进程发送消息Message,Pid为新进程的进程标识符。2.接收消息receive Pattern1 [when Guard1] -> Exp1; Pattern2 [when Guard2] -> Exp2; ...after Time原创 2017-10-26 21:48:57 · 368 阅读 · 0 评论 -
Erlang 语言中的进程与并发
在前面所有示例中,无论是单个函数的执行,还是多个函数通过相互调用的执行,它们都是单进程的执行。即函数根据调用顺序依次调用并执行,同一时刻只有一个函数在执行中。 要实现程序的并发执行或多个函数互不干涉的独立执行,首先要理解并发与进程的概念。 进程在操作系统中是指程序的一次运行及其所分配的各种系统资源(包括内存、I/O等),Erlang 中的进程并不是操作系统中的进程,而是指Erl原创 2017-10-27 08:30:06 · 828 阅读 · 0 评论 -
Erlang基础之模式匹配(2)
本节主要介绍元组与列表的模式匹配。 一、元组的模式匹配 元组的匹配对于左端有一定的要求,若能匹配成功,则需要: 1.左端必须和右端具有相同形式,应含有相同数量元素; 2.左端中的常量必须与右端对应位置的常量相等; 3.对于右端中不同位置的相同常量,在对应的左端中可以使用同一个变量进行成功的模式匹配; 4.“_”(下划线)是变量的通配符,可原创 2017-10-09 17:02:25 · 807 阅读 · 0 评论 -
Erlang基础之模式匹配(1)
模式匹配在Erlang语言中具有极其重要的作用,也是Erlang独特性的一个重要方面。 模式匹配的基本形式为: 左端= 右端 其中,右端可以是一个具体的值,也可以是一个表达式;左端可以是一个简单的变量,也可以是一个由变量和原子等形式构成。“=”称为模式匹配运算符。 模式匹配的基本过程为: 1.右端部分若为表达式则应先计算表达式的值; 2.将左端的模原创 2017-10-09 11:45:18 · 764 阅读 · 0 评论 -
Erlang基础之原子
在Erlang语言的文档中,原子的英文为atom,其英文意义为“原子”、“微粒”,但也有资料译为基元,本文称之为“原子”。Erlang中,原子是由字符序列来标识的字符串常量(注意不是字符串),通常以小写字母开头,其后可包括大写字母、数字、下划线和@符号。但其中也可以插入其他字符,这时要用单引号将其括起来。原子的字符长度最大值为255。比如以下几个原子:okerrorerrorOR原创 2017-09-12 16:07:43 · 1518 阅读 · 0 评论 -
Erlang复合数据结构基础之元组与列表
一、元组前面介绍的整数、浮点数、原子等类型的数据,它们都是简单类型的数据。在生活中我们时常会用到一组数据,这一组数据由可能由多个相同类型的简单数据构成,也可能由多个不同类型的数据构成,比如描述一个人,会有姓名(可用原子描述)、身高(可用浮点数描述)、体重(可用浮点数描述)、年龄(可用整数描述)。这些如果单独存放则不得于数据的组织和使用,所以可以用元组来存放他们:{john,17.4,60.原创 2017-09-28 11:40:43 · 1320 阅读 · 0 评论 -
Erlang函数递归调用模式
在Erlang语言中,为了提高运行效率,少占用系统资源,在编写递归调用的函数中,主要分为两类:非尾递归和尾递归。尾递归是指在递归函数的内部进行递归调用时,在递归调用之后函数就结束了。以下以两个简单的例子作为说明:1.使用非尾递归编写求0-X的数值之和sum(0) -> 0;sum(X) -> sum(X-1) + X.当传入3时,递归调用流程如下:sum(3-1)原创 2017-10-20 16:47:22 · 618 阅读 · 0 评论 -
Erlang模块与Erlang程序的运行方法
一、模块与程序文件 Erlang是一种函数式编程语言,当我们要完成一个项目时,总不可能把所有的函数都定义在一个程序文件中,为了开发和维护方便,通常按逻辑功能划分将其分别分散在多个程序文件中。 每个Erlang程序文件就是一个模块,文件名的扩展名部分为.erl,模块的名称必须与文件名称中的主文件名完全相同(不包括扩展名.erl)。 在Erlang程序文件中,用以下模原创 2017-10-13 08:54:24 · 6314 阅读 · 1 评论 -
erlang 模块中函数学习
在Erlang语言的常见几种资料中,大多重点介绍语法及相关知识,对Erlang中的标准库函数的介绍很少。在编程时,总觉得不知道就没有底,今天就来了解下erlang模块中的函数。erlang模块中的函数里,有一部分在交互式环境中是可以直接调用而不用带模块名的,但也有的在调用时必须带模块名,这个在erlt*.pdf 文档中有说明,文档中列出的函数带有“erlang:”前缀的,在调用时必须带模块名。原创 2018-01-17 17:32:29 · 521 阅读 · 0 评论 -
WEB 框架后端开发学习大纲
1、测试服务器的建立;2.GET/POST请求的实现;3.GET请求参数的获取;4.POST请求参数的获取;5.文件上传的实现;6.静态文件服务;7.cookie的使用;8.session的使用;9.简单项目开发实践;10.框架服务器的部署原创 2017-12-25 10:36:09 · 547 阅读 · 0 评论 -
一个完整的OTP应用简例
以前研读过一次Erlang OTP框架,但总觉得理解还不够,没有亲手实现一个应用。纸上得来终觉浅,绝知此事须躬行。:) 近日恰好有时间,又把Erlang OTP框架拿来研读,并尝试完成了一个简单的用OTP实现的应用。本应用同时实现了一个事件管理器及相关测试代码。 应用实例中实现的行为模式包括application、supervisor、gen_server、gen_event,原创 2017-12-22 16:14:01 · 4289 阅读 · 0 评论 -
Erlang 错误处理
任何程序设计语言中都会有相关的错误处理语法,Erlang 语言也不例外。 一、Erlang 语言常见错误类型 在Erlang 语言中,常见错误类型有三种,即throw、exit和erlang:error。throw用于抛出调用者可能会捕获的错误;exit错误是终止进程错误;error则是崩溃错误。 在Erlang程序中,通过throw(Why)、exit(Why)和e原创 2017-10-26 09:39:24 · 1325 阅读 · 0 评论 -
Erlang 分支结构程序与保护式
在大多数程序设计语言中,都会具有分支结构的程序语法,即if语句和case语句。Erlang 语言中也有if语句和case语句。一、if语句基本格式如下:if Guard1 -> exp1,exp2; Guard2 -> expa,expb; ...endGuard1,Guard2依次进行计算,如果有一个为true,则计算其后的各个表达式。但如果没有一个为tru原创 2017-10-25 16:34:00 · 355 阅读 · 0 评论 -
Erlang 分布式编程一
Erlang 并发编程是在同一 Erlang 虚拟机上创建多个进程来实现的。而Erlang 的分布式编程可以通过在不同主机上的Erlang 虚拟机(可以运行在同一主机中或可以互相通过网络主机上)实现,其中运行Erlang 虚拟机的主机也称作Erlang 的节点。在Erlang 中,可以实现在一个Erlang 虚拟机上远程在另一个Erlang 虚拟机上创建新的工作的进程,然后利用其消息传递机制,将要原创 2017-11-01 16:14:15 · 1989 阅读 · 0 评论 -
Erlang匿名函数及函数的高阶应用
Erlang 作为一种函数式编程语言,和其他的函数式编程语言一样具有lambda函数,在Erlang中也称为匿名函数,同时函数也可以赋值给变量或作为参数进行传递,此处对Erlang 中的匿名函数及级高阶应用作简要介绍。 一、匿名函数 Erlang 中匿名函数在定义时使用fun作为函数的名称,下图为一个基本的匿名函数的定义和使用: 图中定义了一个匿名函数,并将其原创 2017-10-24 20:12:19 · 2144 阅读 · 0 评论 -
Erlang 并发编程基础二
在《Erlang 并发编程基础一》中介绍了:如何新建一个进程和向一个进程发送消息,以及注册进程。而各进程之间没有任何关系。本节主要介绍进程关系及其处理。如果使用上节中的方式新建的进程,则进程是各自独立、互不依赖的,任何一个进程消亡都是无声的,它不会通过其它进程,其它进程也关心不到它。但在程序中也会需要有进程之间依赖的关系,比如一个进程消亡会影响另一个进程或一个进程需要另一个进程服务,这原创 2017-10-31 17:10:33 · 273 阅读 · 0 评论 -
Erlang基础之布尔值
在Erlang中没有专门的布尔类型的值,而是使用原子true和false直接作为布尔值。比较操作和布尔运算的结果都是布尔值。以下为布尔值之间的运算与运算符:and 参与运算的两个参数都是真,返回的结果为真or 参与运算的两个参数有一个是真,返回的结果为真xor 参与运算的两个布尔值不同,返回的结果为真andalso 采用短路计算方式,第一个参数为假,则返回假而不计原创 2017-09-27 17:20:21 · 656 阅读 · 0 评论 -
Erlang基础之浮点数
在实际的学习、工作和生活中,只用整数是远远不够的。编程语言也是如此,人们需要用浮点数来进行计算和处理相关信息。一、浮点数的写法1.我们日常生活中用的带小数点的数,都是浮点数,比如:3.45 7.89 2.0 5.00002.当我们需要表示较大的逐点数值时,为了减少书写难度和阅读难度,常使用科学计数法来书写它。而在计算机领域中也是可以使用这种方法的。浮点数中的“浮”,原创 2017-08-17 17:00:00 · 1188 阅读 · 0 评论 -
跨过程序设计门槛之建立Erlang开发环境
学习一门编程语言,应当一边学习基本理论,一边进行程序的开发和调试。这样才能达到最终目的。建立Erlang的开发环境就成为首要任务。Erlang语言也是一种可跨平台使用的编程语言,它可以运行在一、Windows系统下Erlang的安装1.进入Erlang的官方网站,下载Windows系统下的安装程序。2.启动安装程序,基本上一路“下一步”就可以安装好Erlang的运行环境了(在安装过原创 2017-08-02 16:10:44 · 327 阅读 · 0 评论 -
erlang 模块常用函数总结
通过阅读erlang文档,对erlang模块中常用函数总结如下:1.常用类型转换2.数值操作abs/1round/1trunc/1float/13.比较大小max/2min/24.日期与时间date/0time/05.元组操作element(N,Tuple)append_element(Tuple1,Item)insert_e原创 2017-04-10 09:50:14 · 1024 阅读 · 0 评论 -
Erlang学习笔记-服务器框架理解
通过学习《Erlang程序设计》中OTP概述中基本服务器一部分,增进了对OTP服务器框架的理解。我的理解如下图:原创 2017-03-31 10:27:21 · 589 阅读 · 0 评论 -
erlang OTP 通用服务器行为模式理解
OTP的行为模式对于初学者理解起来的确是有一定难度的,现根据个人理解总结如下:1.基本工作方法由用户定义相关功能函数,但这个功能函数并不是直接实现相关功能,而是直接调用gen_server模块中的指定功能所需要的对应函数。而用户调用gen_server模块中的对应函数会间接调用由用户定义的具体实现(要求这个具体实现必须按要求返回数据)。从而完成相关功能。读起来是不是很绕人啊。举个例子:在通用服务行...原创 2017-03-30 10:22:47 · 4754 阅读 · 3 评论 -
erlang学习笔记-记录使用
一、定义记录应将记录定义在扩展名为.hrl的文件中,其定义格式为:-record(thing,{keya=defaulta,keyb}).其中,thing为记录的名称;keya、keyb为记录中的字段名,其中keya带有一个默认值defaulta。二、读取记录的定义在shell中用rr("filename.hrl")来读取记录定义,然后就可以使用了。三、创建记录基本格式原创 2017-03-29 10:54:03 · 1103 阅读 · 0 评论 -
Erlang编程实践启示
Erlang写起来更Erlangic。原创 2017-02-25 16:30:11 · 355 阅读 · 0 评论 -
Erlang语言学习系列(四)
变量与模式匹配1.Erlang中变量标志符应以大写字母开头。2.所有变量为单一赋值变量;未绑定值前,为自由变量,可绑定任何类型值;一旦绑定,则永远不能改变。(变量是不是有点名不符实呢^-^)3.“=”号在Erlang语言中为模式匹配运算符,表示进行一次模式匹配。比如:X = 2. %X为自由变量时,将2绑定给X,会使得模式匹配结果为true,因为2和2可以匹配。X = 3.原创 2016-01-14 21:42:37 · 477 阅读 · 0 评论 -
Erlang语言学习系列(三)
Erlang结构数据类型1.元组用一对花括号包围,其中用逗号分隔的一组值。其值可以为Erlang语言的基本值,也可以是其它的结构数据类型。例:{1,2,3}、{point,3,5}、{circle,{point,3,5},{radius,10}}等都是元组类型。2.列表用一对方括号包围,其中用逗号分隔的一组值。和元组类似,其中每个值也可以是其它结构数据类型。例:[1,2,3原创 2016-01-14 17:55:21 · 462 阅读 · 0 评论 -
Erlang语言学习系列(二)
本篇主要学习Erlang中的简单数据类型。1.整型及其运算(基本上和其它高级语言类似,但也有所不同)举例:32,16#CF,8#25其中第二个为十六进制的数,第三个为八进制的数。其运算符有:+、-、*、/、div、rem。任何两个数值的/运算得到浮点数。div和rem分别是整型数参与运算,得到商和余数。此外,Erlang中的整型可以是超大整数,其运算也无误差。2.浮原创 2016-01-14 13:37:47 · 396 阅读 · 0 评论 -
Yaws(erlang web服务器框架) 学习记录之一
一、安装在Window系统下,安装很容易,直接下载安装程序http://yaws.hyber.org/download/Yaws-2.0.4-windows-installer.exe后运行,选择一个安装目录,一直下一步就会完成安装。二、运行服务器在命令提示符下使用命令yaws -i以交互模式运行yaws服务器。如下图所示通过上图中提示可以看出:服务器配置文件默认为原创 2017-04-10 16:24:17 · 3320 阅读 · 0 评论 -
Yaws(erlang web服务器框架) 学习记录之使用自定义函数输出WEB页内容
在Yaws框架中提供的动态WEB页文档中,我们可以用嵌入Erlang代码来定义函数,然后使用out(Args)函数来调用它,以达到实现动态页面目的。按照目前流行的WEB后端开发的基本方式,Erlang代码定义的业务函数和静态页面的HTML代码应尽量分开存储在不同的文件中,在Yaws中也是可以实现的。一、修改配置文件Yaws在渲染页面内容时,会根据配置文件来自动搜索模块并实现对其中的函数原创 2017-04-11 10:09:06 · 1494 阅读 · 0 评论 -
跨过程序设计门槛之初见Erlang交互式环境
交互环境是开始学习Erlang语言的最好工具,在其中你可以运行Erlang的表达式、编译Erlang的程序源文件、运行已编译的Erlang的程序,还可以进行程序的调试。Erlang的交互式运行环境可以作为一个运算器,比如:符合数学四则运算规则的式子都可以在其中计算出结果,甚至你感觉很大的整数运算,一样可以顺利完成,而实际上Erlang能处理多大。从图中可以发现,每个运算式子都是以“原创 2017-08-02 16:28:12 · 307 阅读 · 0 评论 -
Erlang基础之整数
任何编程语言都有一个基本的数值系统,而整数是编程语言数值系统中最基本的数据之一。一、整数基础Erlang中的整数和我们平常所用的整数完全一样。比如:23 456 -108 984673以上这些整数就和我们平常看到的数值完全一致,其意义也相同。在计算机领域中,还常常使用与我们平常使用的整数不一样的整数。我们日常使用的整数是十进制整数,简单的说就是计数时是逢十进一。编程中原创 2017-08-16 15:42:49 · 735 阅读 · 0 评论 -
编程入门必知——Linux系统下终端的使用
学习编程时,除了只有Windows系统支持的编程语言,绝大多数编程语言都是支持在Linux系统下开发和调试的。如果你选择在Linux系统下学习编程,为了方便开发和调试,Linux系统下的终端的使用也是必备技能之一。一、终端的启动Linux系统是原生支持字符界面的操作系统,比如你安装CentOS发行版的最小化安装的话,安装完成后就只会进入字符控制台,使用命令行来进行有关操作。如果不安装G原创 2017-06-03 09:54:28 · 5980 阅读 · 0 评论 -
Yaws(erlang web服务器框架) 学习记录之Cookie使用
Cookie的使用是WEB开发中所必须掌握的知识点之一。HTTP请求本身是无状态的,要保持请求的状态就离不开Cookie。常见的应用比如购物车、登录等应用。Yaws中使用Cookie是比较简单的。但其官方文档(yaws.pdf)没有做出简单的介绍,并且没有这两个函数的详细介绍,必须要阅读API文档来查找。要在Yaws中使用Cookie,就是掌握两个API函数:1.yaws_api:se原创 2017-04-19 15:21:48 · 933 阅读 · 0 评论 -
Erlang学习笔记— Mnesia数据库使用入门
阅读了相关书籍和资料,总觉得入门不够简单,让人迷糊,最后还是自己总结一个简单点的入门吧。Mnesia数据库是Erlang内置的一个DBMS,可以直接存储Erlang的各种数据结构。有其它语言编程经验的可能比较熟悉,要将某种语言中的数据结构放入数据库,就需要对其进行转换(如序列化、python的pickle等)。同时,Mnesia数据库还可以配置数据存储在内存或磁盘上,甚至在多台计算机上存储多个原创 2017-04-06 09:19:59 · 4771 阅读 · 3 评论 -
Yaws(erlang web服务器框架) 学习记录之文件上传
Yaws提供了文件上传的API函数,从一些参考资料或Yaws的示例中,都提及使用yaws_api:parse_multipart_post/1这个API函数在服务器端进行文件数据的接受和处理。而在Yaws官方文档中,却提及了另一个API函数,即yaws_multipart:read_multipart_form/2在服务器端进行上传文件数据的处理。由于,以前还没有接触过Yaws框架,所以详细阅原创 2017-04-18 10:30:09 · 1514 阅读 · 0 评论 -
Yaws(erlang web服务器框架) 学习记录之获取GET/POST请求参数
在Yaws框架中,获取请求参数的API函数有以下几个:1.yaws_api:parse_query(Args)%解析GET请求参数,并返回所有参数列表,列表中为所有参数名称和值(字符串形式)构成的一个元组。2.yaws_api:parse_post(Args)%解析POST请求参数,并返回所有参数列表,列表中为所有参数名称和值(字符串形式)构成的一个元组。3.原创 2017-04-13 10:51:48 · 1156 阅读 · 0 评论 -
Yaws(erlang web服务器框架) 学习记录之输出网页代码
作为支持动态网站开发的框架,自然要有通过动态数据生成HTML代码的方法。简单的说,主要有两种方式:一、直接输出HTML代码这种方式是以HTML代码字符串的形式作为输出函数out/1的返回值,其格式为:{html,html字符串}比如:{html,"Hello"}就会输出HTML代码:Hello二、使用ehtml形式输出HTML代码这种方式仍然使用out/1函原创 2017-04-11 16:38:17 · 784 阅读 · 0 评论