Erlang学习笔记(一)

1、何为Erlang?

Erlang是一种通用的面向并发的编程语言,内建了并行的计算支持,非常适合构建分布式应用和实时软件并行计算系统。使用Erlang编写的应用运行时通常由成千上万个轻量级进程组成,并通过消息相互传递。比起C程序的切换更为高效。

如果说c++构建高并发的服务框架程序,Erlang不仅高效而且简单。尤其是Erlang编写的分布式应用的软件,分布式机制透明。因此对于我们写的程序来说,并不知道自己是在分布式运行的。

从运行时的环境上来说,Erlang也需要一个虚拟机,类似JAVA的虚拟机,.net的Framework,这样代码一次编译,随处运行。更可观的是,它的运行时系统甚至允许代码再不中断的情况下更新。

2、Erlang的特性:

并发性 - Erlang支持超大量级的并发进程,并且不需要 操作系统具有并发机制。
分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点)
健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。
● 软实时性- Erlang支持可编程的“软” 实时系统,使用了递增式垃圾收集技术。
● 热代码升级-Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。
●递增式代码装载-用户能够控制代码如何被装载的细节。
●外部接口-Erlang进程与外部世界之间的通讯使用和在Erlang进程之间相同的消息传送机制。
●Fail-fast(中文译为速错),即尽可能快的暴露程序中的错误。
●面向并发的编程(COP concurrency-oriented programming)
●动态类型
●及早求值或严格求值

3、Erlang  如何学习?

好好学习,天天向上吧,多看官网,多code。多翻资料。现在我们就来介绍下Erlang 的一些知识:

1)创建一个Module,等同我们常说的OOP中的Class。Module中可以包含一些对象的属性和方法。如:
创建一个Module名为test的erl文件,

vim  test.erl.

2)声明一个类test,这里的.代表着该语句结束。

-module(test).

3)创建一个函数

bbs(cc)  -> 12*cc.

注意这里的->相当于我们程序中的{}

4)执行函数调用,export

-export([bbs/1]).

注意:Erlang为弱类型,其函数体命名的方式为:

函数名(参数名) ->

函数体内部

如果要执行该函数的话,则为-export([函数名/1]).

完成以上代码后,我们现在来编译下这个例子

进入erlang编译环境:erl

输入c(test).

输入:test:bbs(10).

结果:120.

4.Erlang的开发规范:

一:开始
    每条语句以一个“.”结束
    Erlang遵守四则表达式的规则
    可以计算很大的数字

二:变量
    1.所有的变量名都必须以大写字母开头
    2.变量只能赋值一次。即变量不能多次赋值,否则会得到一个错误
      首先:用户定义的变量并不是真正意义上的变量;
      其次:"="并不是一个赋值操作符
    3.事实上"="是一个模式匹配操作符,对于一个未绑定变量来讲,它的行为类似与赋值操作
    4.变量有作用域,即多个函数内的同一个变量有不同的值
    5.Erlang中的=号是一个模式匹配操作符
    6.=号的作用是先计算右边的操作数类型,然后与左值的类型匹配
    7.对于一个变量,它只是一种简单的类型。未绑定变量作为左值时先是给它匹配上一个右值类型
    8.=号的右值可以是变量或其他的类型,如序列和列表
    注:由于变量的一次赋值性,在Erlang中没有共享内存,所以便于编写并行化的程序。
三:浮点数
    1. /号返回浮点数除法的商
    2.div 号返回整数除法的商
    3.rem 号返回整数除法的余数
四:原子量(Atoms)
    1.Erlang中atoms用来表示不同的常量
    2.atoms是全局性的
    3.atoms以小写字母开头,后面跟上数字,字符,下划线,或“@”,例如:: red,
       december, cat, meters, yards, , and a_long_name.
    4.atoms可以用单引号引起来,使用这种形式后可以创建大写字符开头的atoms,或
      者包含非数值字符的atoms,例如’Monday’, ’Tuesday’, ’+’, ’*’,
     ’an atom with spaces’
    5.atoms的值只是atom
五:元组(Tuples)
    1.使用tuple可以实现复杂的数据结构
    2.使用封闭的花括号创建tuple,其中的数据项是匿名的
    3.tuples可以嵌套使用
    4.tuple有垃圾回收机制,无需自己整理内存,当变量不使用后可以自动回收空间。
  5.可以将一个tuple绑定到一个变量上,之后这个变量也就有了相同的结构
  6.可以使用将一个结构相同的tuple变量赋值给另一个tuple(不能是tuple变量),则会将tuple变量中的
  对应值赋给左值tuple中的对应变量。例如Point = {point, 10, 45}.     {point, X, Y} = Point.之后
  则精确的将10赋给X,45赋给Y。其中的point可以是=号两边精确的匹配,体现=号的匹配作用
  7. 1> Person={person,{name,{first,joe},{last,armstrong}},{footsize,42}}.
   2> {_,{_,{_,Who},_},_} = Person.
   如上,_是一个占位符,这样可以用单个变量提取tuple中的值。在Erlang中称其为匿名变量。
六:列表(list)
    1.list可以用来存储一系列量。
    2.使用[]来创建列表。
    3.可以使用[X|Y]=L来提取L中的最左边的一个值到X,而将剩余的部分赋给Y
      例如:1> ThingsToBuy = [{apples,10},{pears,6},{milk,3}].
            3> ThingsToBuy1 = [{oranges,4},{newspaper,1}|ThingsToBuy].
            4> [Buy1|ThingsToBuy2] = ThingsToBuy1.
            5> [Buy2,Buy3|ThingsToBuy3] = ThingsToBuy2.
      之后则
       Buy1={oranges,4}  
       ThingsToBuy1=[{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}]
       ThingsToBuy2=[{newspaper,1}, {apples,10}, {pears,6}, {milk,3}].
       Buy2= {newspaper,1},   
       Buy3 = {apples,10},
       ThingsToBuy3=[{pears,6}, {milk,3}]
七:字符串(Strings)
    1.字符串实际上是只是一个整数的列表(list)
    2.字符串用双引号标记
    3.当一个列表中的元素都为可打印字符的ASCII码时显示出的就是这个列表对应的字符串。
    4.可以将$号放在一个可显示的字符前时,即可取出该字符的ASCII码
    5.Erlang的字符串中使用的字符集是Latin-1 (ISO-8859-1)
八:1.在shell中输入f()后可以是所有的已经绑定的变量解除绑定

5、注意事项:

(函数名/1):代表有Module内只有1个方法

 (函数名/2):代表Module内有两个方法,且方法重名,参数个数相等。以此类推


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值