注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

golanguage/erlang学习笔记  

2014-10-02 10:37:30|  分类: linux分布式运算 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

99.总观erlang
    Erlang是一门面向容错、分布、并发、多核来设计的一门函数式编程语言。
    Erlang是Ericsson和Ellemtel Computer Scientce Laboratories为解决电信领域中的并发和分布式问题而设计的开源语言,它始于上世纪80年代末,爱立信投资了10亿美金主导开发,已经在电信和互联网行业大规模部署应用,成功案例有Facebook、Github、腾讯、人人网、华为、游戏公司(如4399)……

 Erlang的编程语言与编程思想---函数式编程语言(FP)
         编程思想分类:一本书说,编程语言可分成四大类:
             1)命令式(primitive,如C);
             2)面向对象(object-oriented,如Java);
             3)人工智能语言(如Prolog);
             4)函数式(functional,如Haskell、LISP、Erlang)。

        函数式编程语言最重要的基础是λ 演算(lambda calculus),λ 演算的函数可以接受函数当作输入和输出。 特性:闭包和高阶函数、递归、惰性计算、引用透明性、没有变量和副作用。
        模块化是成功编程的关键,而函数编程可以极大地改进模块化。  
   
       面向并发编程(COP)
        世界是并发的。 想象有一群人,没有共享的状态,只通过传递消息的方式交流。

erlang的总体一句话特点描述:没有变量=没有锁=容易并行化
        Erlang特性:轻量级进程(Light-Weight Process, process is cheap!)、异步消息机制、软实时、代码热升级(Hot Swap)……
        ::函数的返回值:  函数不会显式地返回值,函数中最后一条语句的执行结果将作为函数的返回值。
       :: 函数的分支:       同一个函数中,并列的逻辑分支之间,用分号 “;” 分界;顺序语句之间,用逗号 “,” 分隔。
                                      ‘=’不是一个赋值操作符,是一个模式匹配运算符,这是与c的不同点之一。
       :: 数据类型:
            不定长整数
                    >123456789*987654321*112233445566778899*998877665544332211.
                    说明:总能返回计算结果,不认你多大多小。
         ::浮点数
         :: 字符串:    字符串实际上是一个整数列表。
         ::双引号
                 ***********************
                 >[83,117,114,112,114,105,115,101].
                   "Surprise"
                  ***********************
golanguage/erlang学习笔记 - itoedr - itoedr的it学苑
             ::变量:
                必须以大写字母开头,不然给你报错。
                单一赋值变量——一次赋值,永不可变。
                ‘_’是占位符,表示不关心的变量,匿名变量。
                定义一个变量的词法单元就是这个变量的作用域。在同一个函数的不同子句中,彼此之间也不存在全局或者共享的私有变量。

        ::几个概念:
            :原子(Atom): 原子用来表示不同的非数字常量值。Erlang中的原子是全局有效的,而且无需使用宏定义或者包含文件。原子是一串以小写字母开头,后跟数字字母或下划线或邮件符号的字符;或者是使用单引号引起来的字符。
           : 元组(Tuple):
                { SthA, SthB, ... }   #类似于C语言的struct,不过元组是匿名的。
                元组可以嵌套。

            :列表(List):
               如: [Head | Tail],Tail也是一个列表。各元素类型可互不相同的数组。
                列表解析(List Comprehensions)——无须使用fun、map或filter来创建列表的表达式。
               如:  [X || Qualifier1, Qualifier2, ...]
                    X可以是任意一个表达式,每个限定词可以是一个生成器或者是一个过滤器。
                    生成器通常写为Pattern <- ListExpr,其中ListEpr必须是一个对列表项求值的表达式。
                    过滤器可以是一个谓词(返回true或false的函数),也可以是一个布尔表达式。
            :记录(Record):
                命名的元组和元组元素——记录只是元组的伪装。
              ::Erlang 的模块(Module)——一个erl文件
              :: 模式匹配(Pattern Matching)
                          使用模式匹配从不同的情况中去选择和从复杂的数据结构中抽取组件。先出现,先匹配。

        ::条件表达式::
            :断言(guard):一种用于强化模式匹配功能的结构。 用于函数定义的头部时,guard以when开头; 用于表达式时,guard被求值,求值结果为原子true或false。
                and、andalso;or、orelse
            :case表达式
            :if表达式
                else--true原子
            : 匿名函数fun
            :高阶函数:能够返回fun或者接受fun作为参数的函数。
            : 延迟求值、可重入的解析器、解析组合子……

             : the glue:
                lists:map(F,L)——将fun F应用到列表L的每个元素上,并返回一个新的列表。
                lists:filter(P,L)——返回一个新列表,新列表由列表L中每一个能满足P(E)为true的元素组成。

              :::并发基础——3个原语
               : spawning new processes
                Erlang 中进程是函数的动态执行,函数执行完,进程就会退出。 进程是轻量级的,spawn 函数(是有反回值的,与c一样)用来创建进程,返回新进程的 ID。
                :sending messages
                  Erlang 为每个进程配备 mailbox 用来接受消息。
                  Erlang 发送消息的语法是:
                        格式如:Pid ! Message      #把消息 Message 发送给进程, Pid 是接受进程的 ID,
                        当然:一条消息可以发给多个进程(并发需要).
                        格式如: Pid2 ! Pid1 ! Message  # 消息先发给 Pid1,再发给 Pid2。
                 :receiving messages
                         receive 子句接受消息,如果当前 mailbox 是空的,进程将阻塞直到新的消息到来。
                         收到的消息可以按照 Pattern Matching 执行相应的动作,完了进程就退出.
     
       :::如果想继续接受消息,则递归调用自己,这样进程就不会退出了(如同一个守护进程)。

100. 在erlang中,变量最好以大写字母开始.
否则出现"Warning: this expression will fail with a 'badarith' exception"(错误的数学表达)
  评论这张
 
阅读(117)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017