`
argan
  • 浏览: 129628 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Erlang 基础学习 2 简单的程序

阅读更多
Erlang Sequential Programming

Modules

• 存放在.erl的文件里,需要先编译才能运行
• 代码的基本单元,所有的函数都存在module里
•    Bogdan’s Erlang Abstract Machine
• 在erlang shell 中,使用c(module_name).来编译和装载一个module
• 看代码
-module (geometry).
-export ([area/1]).

area({rectangle,Width,Height}) -> Width * Height;
area({circle,Radius}) -> 3.14159 * Radius * Radius.

• 上面代码中,执行area函数,实际上是匹配area各个实现的参数的过程,匹配到了,就执行函数体的内容,然后返回

Funs
• 高阶函数,返回函数,或者接受函数为参数的函数
• Double = fun(X) -> 2*X end.
• 246 = Z (123).

• [2,4,6,8] = lists:map(Double,[1,2,3,4]).
• lists:map,lists:filter
• 
• Fruit = [apple,pear,orange].
• MakeTest = fun(L) -> (fun(X) -> lists:member(X, L) end) end.
• IsFruit = MakeTest(Fruit).
• IsFruit(pear).
• lists:filter(IsFruit, [dog,orange,cat,apple,bear]).
• 
• lists 的快速操作方式
• L = [1,2,3,4].
• [2,4,6,8]=[2*X || X <- L ].
• [X || Q1,Q2,Q3...]
• Q1,Q2 是一些表达式,一种是产生内容的,例如 V <- [],另一种是过滤器,返回true/false的表达式
• 计算满足毕达哥拉斯表达式的数字组合
pythag(N) ->
    [ {A,B,C} ||
        A <- lists:seq(1,N),
        B <- lists:seq(1,N),
        C <- lists:seq(1,N),
        A+B+C =< N,
        A*A+B*B =:= C*C
    ].

数学表达式优先级

Guards
• guard sequence是由一系列的guard组成,用分号(;)分隔,G1;G2;G3 当至少一个为true是就为true
• guard 是由一一些guard表达式组成,用逗号(,)分隔,如Exp1,Exp2,Exp3,当所有表达式为true时,guard为true
• is_atom,is_integer ,is_系列

Record

-record(Name, {
                %% the next two keys have default values
                key1 = Default1,
                key2 = Default2,
                ...
                %% The next line is equivalent to
                %% key3 = undefined
                key3,
                ...
              }).

• record 只能在erl module里使用,不能在shell里使用
• 所有的key必须是 atom
• X1 = #todo{status=urgent,text="adfadfa"}.
• X2 = X1#todo{status=done}. %  拷贝X1,然后将status赋值
• record的值的取得可以通过pattern match来取得,不提
• 另外,如果只需要一个字段的值,可以使用 X2#todo.text. 来获取
• 本质上,record是保存为一个tuple的,在shell里使用rf(todo).来删除shell里todo这个record,这时候,查看X2的值是{todo,gogogo,argan,undefined},第一个是record的名字,后面是按顺序保存的每个字段的值
• 具体使用,例如:
clear_status(#todo{status=S, who=W} = R) when is_record(R,todo) ->
    %% Inside this function S and W are bound to the field
    %% values in the record
    %%
    %% R is the *entire* record
    R#todo{status=finished}
    %% ...

case 和if 表达式

case Expression of
    Pattern1 [when Guard1] -> Expr_seq1;
    Pattern2 [when Guard2] -> Expr_seq2;
    ...
end

if
   Guard1 ->
     Expr_seq1;
   Guard2 ->
     Expr_seq2;
   ...
end


• 总是优先使用系统提供的函数,例如lists:reverse/1



分享到:
评论

相关推荐

    Erlang程序设计(第2版)1

    【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...

    Erlang游戏程序学习完整PDF手册

    - **Erlang基础**:包括基本语法、数据类型、函数定义、模式匹配、过程和模块等。 - **并发编程**:介绍Erlang的进程、消息传递、同步和通信机制,以及如何利用这些特性实现并发。 - **分布式Erlang**:讲解如何在...

    erlang学习资料

    理解函数式编程的核心概念,如不可变数据、高阶函数和模式匹配,是学习Erlang的基础。 2. **过程与并发**:Erlang中的并发是通过轻量级进程(Lightweight Processes, LWP)实现的,每个进程有自己的堆栈和消息队列...

    erlang程序设计

    在深入探讨Erlang程序设计之前,我们先来了解一下Erlang的基础概念。 1. 函数式编程:Erlang是一种纯函数式编程语言,这意味着函数不具有副作用,它们仅根据输入产生输出,不改变外部状态。这种特性使得代码更容易...

    erlang 中文基础教程

    在Erlang Shell中,你可以像使用计算器一样进行简单的算术运算,如`2+5.`,其中`.`是必要的结束符号,表示计算完成。Shell会返回结果`7`,并在下一行显示出新的提示符`2&gt;`。这种即时反馈的特性使得Erlang Shell成为...

    erlang中文基础教程

    **Erlang编程语言简介** Erlang是一种高级并发编程语言,由...通过《erlang中文基础教程.doc》文档和《更多erlang资料下载.txt》文件,你可以获取更多的Erlang学习资料和实践案例,逐步掌握这一强大而独特的编程语言。

    Erlang程序设计中文版

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

    Erlang程序设计,包含完整目录和全套源码

    这个压缩包包含了Erlang程序设计的完整目录和源码,是学习和理解Erlang编程的重要资源。 Erlang的并发特性源于其轻量级进程模型,每个进程都有自己的内存空间,进程间通信通过消息传递实现,这种设计降低了并发执行...

    Erlang程序设计及源代码打包

    **Erlang程序设计概述** Erlang是一种面向并发的、...总的来说,Erlang程序设计是一门深入探讨Erlang语言及其应用的课程,结合源代码实践,可以帮助你建立起坚实的基础,进而探索更高级的并发和分布式系统构建技术。

    erlang程序设计中文版

    它不仅包含顺序编程的基础知识,还深入探讨了文件和网络编程、OTP(Open Telecom Platform)、ETS(Erlang Term Storage)和DETS(Disc Erlang Term Storage)等高级主题,这些都是开发高效Erlang应用程序的关键技术...

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

    通过阅读《Erlang程序设计》第二版,无论是初学者还是有经验的开发者,都能从中获益,学习到如何利用Erlang来构建高效、健壮的并发系统。中文版和英文版的提供,使得不同语言背景的读者都能无障碍地学习这门强大的...

    erlang的学习pdf

    ### Erlang编程语言基础知识 ...通过以上介绍,我们不仅了解了Erlang的基础概念及其优势,还学习了如何安装配置Erlang环境以及简单的Erlang编程方法。希望这些信息能够帮助初学者快速入门Erlang编程。

    erlang编程 Introducing Erlang

    Simon St. Laurent的《Introducing Erlang》这本书深入浅出地介绍了这些概念,是学习Erlang的理想起点。通过阅读这本书,读者将能够理解Erlang如何处理并发、分布式计算和故障恢复,从而构建高效、健壮的软件系统。

    erlang22最新下载包

    5. **并发与分布式系统支持**:Erlang以其轻量级进程和消息传递为基础的并发模型著名,新版本可能会加强这方面的能力,更好地支持分布式应用程序。 6. **编译器和工具链**:Erlang的编译器和构建工具可能也得到了...

    两本erlang电子书

    这两本电子书——《Erlang and OTP in Action》和《Erlang程序设计》——都是深入学习Erlang语言和OTP的宝贵资源。 《Erlang and OTP in Action》这本书主要分为三个部分。第一部分介绍Erlang语言的基础知识,包括...

    erlang programming

    6. **热升级与无中断服务**:Erlang支持代码热升级,即在不中断运行的情况下更新应用程序代码,这对于保持高可用性和服务连续性至关重要。 7. **并发性能优化**:Erlang的并发性能优化涉及进程数量的控制、消息队列...

    erlang资源

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

    Erlang编程中文学习手册.pdf

    根据提供的文件信息,这份Erlang编程中文学习手册涵盖了Erlang编程语言的基础知识和一些进阶内容,旨在帮助读者从入门到初中级水平的提升。以下是手册中提到的Erlang编程的相关知识点。 首先,手册介绍了Erlang语言...

    erlang程序设计第二版课后习题答案(精简版).zip

    这份"erlang程序设计第二版课后习题答案(精简版).zip"文件,包含了作者对部分习题的解答,虽然并非完整覆盖所有章节,但依然能为学习者提供有价值的参考。 Erlang是一种函数式编程语言,它的设计理念源于电信领域的...

Global site tag (gtag.js) - Google Analytics