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

    erlang中文基础教程

    **Erlang编程语言简介** Erlang是一种高级并发编程语言,由...通过《erlang中文基础教程.doc》文档和《更多erlang资料下载.txt》文件,你可以获取更多的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趣学指南是一本面向初学者的入门书籍,旨在帮助读者从零开始学习Erlang语言的基础知识和编程技巧。 这本书的作者Fred Hébert是一位在一线拥有丰富实战经验的工程师,他通过轻松幽默的文风和清晰的讲解,向...

    erlang programming

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

    erlang资源

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

    Erlang编程中文学习手册.pdf

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

    Erlang资料大全

    这个压缩包“Erlang资料大全”显然是为那些想要学习或深入理解Erlang的人准备的,包含中文基础教程和入门代码。 在Erlang的学习过程中,首先我们需要理解其核心概念。Erlang是基于Actor模型的,每个进程(process)...

    erlang深度分析.pdf

    Erlang有活跃的开源社区和丰富的学习资源,包括书籍、教程、以及大量的开源项目。JavaEye的电子书也是其中的一环,提供了专业的深入分析。 #### 17. 系统设计原则 Erlang遵循“让它失败”原则(Let It Crash),...

    erlang 学习笔记1

    【标题】"Erlang 学习笔记1" ..."rw_file"示例就是很好的起点,它将带你了解如何在Erlang中处理文件I/O,这是任何编程语言的基础。随着对Erlang的理解加深,你会发现它在构建高并发、分布式系统方面的强大潜力。

    Programming Erlang.pdf

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

    Pragmatic.Programming.Erlang.2nd.Edition

    4. **面向Actor的编程模型:**本书深入探讨了Erlang独特的面向Actor的编程模型,这种模型能够有效支持高并发环境下的程序设计。 #### 四、来自行业专家的高度评价 - **Alexander Gounares**(前AOL CTO,Bill ...

    erlang win64_18.1

    Erlang是一种高级编程语言,特别为并发、分布式计算和实时系统设计,广泛应用于电信、银行、...安装"otp_win64_18.1.exe"后,开发者就可以利用Erlang的强大学习社区和丰富的开源库来构建高效、稳定和可扩展的应用程序。

    erlang书籍

    《Erlang程序设计》这本书可能是介绍Erlang基础概念和技术的一本入门书籍,涵盖了变量、数据类型、模式匹配、函数、进程、消息传递等核心概念。书中可能会深入讨论如何在Erlang中编写高效的并发程序,以及其独特的...

Global site tag (gtag.js) - Google Analytics