`
somefuture
  • 浏览: 1089768 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

erlang的函数

 
阅读更多

erlang的方法申明是其引以为豪的,虽然被不用erlang的人嘲笑。

巨丑无比是吧。

erlang声称自己的函数调用使用的是Pattern Match模式匹配:

function(Args)
if X then
Expression
else if Y then
Expression
else
Expression

 这是其他语言的风格,erlang把上面的一个方法拆开成好几个function声明:

function(X) ->
Expression;
function(Y) ->
Expression;
function(_) ->
Expression.

 不过注意,实际上他们是一个整体*(函数名称也是一致的),因为只有到最后采用了结束的点号,中间都用的分号。

 

比如:

greet(male, Name) ->
io:format("Hello, Mr. ~s!", [Name]);
greet(female, Name) ->
io:format("Hello, Mrs. ~s!", [Name]);
greet(_, Name) ->
io:format("Hello, ~s!", [Name]).

 再比如判断年龄是否正常的方法:

right_age(X) when X >= 16, X =< 104 ->
    true;
right_age(_) ->
    false.

 里面的逗号意思是andalso,而分号意思实际上是orelse:所以它的反函数不再使用逗号

wrong_age(X) when X < 16; X > 104 ->
    true;
wrong_age(_) ->
    false.

 这一点是尤其要注意的。

 

接下来是erlang里面的if/else。 erlang没有else 关键字。

help_me(Animal) ->
    Talk = if Animal == cat  -> "meow";
              Animal == beef -> "mooo";
              Animal == dog  -> "bark";
              Animal == tree -> "bark";
              true -> "fgdadfgna"
           end,
    {Animal, "says " ++ Talk ++ "!"}.

 把几个elseif并列起来用分号隔开就行,而else则直接写为true,因为上面的比较返回的false,这里遇见true就可以是剩下的全部情况了。

 

另外一种分支流程判断是case of:

beach(Temperature) ->
    case Temperature of
        {celsius, N} when N >= 20, N =< 45 ->
            'favorable';
        {kelvin, N} when N >= 293, N =< 318 ->
            'scientifically favorable';
        {fahrenheit, N} when N >= 68, N =< 113 ->
            'favorable in the US';
        _ ->
            'avoid beach'
    end.

 看惯了erlang诡异的语法,觉得这个是不是很容易理解了。

 

 

 

 

1
0
分享到:
评论

相关推荐

    Introducing Erlang

    标签“FP Erlang 函数式编程”进一步强调了本书的主题,即围绕Erlang函数式编程语言展开。函数式编程是一种编程范式,它将计算视作数学函数的评估,并避免改变状态和可变数据。Erlang语言特别适合并发和分布式计算,...

    erlang 深度分析

    Erlang函数调用新语法 - **概念**: R12B版本引入的新函数调用语法。 - **优点**: 更易于理解和维护。 - **应用场景**: 代码的热替换场景。 #### 21. Erlang消息监听器调试 - **工具**: `erl_snooper`。 - **功能**...

    Erlang_CNode用户指

    3. **Erlang数据类型和API**:介绍CNode API,包括如何在C中表示和操作Erlang的数据类型(如整数、原子、列表等),以及如何调用Erlang函数和处理返回结果。 4. **进程通信**:阐述如何在CNode中创建Erlang进程,...

    Erlang开发环境搭建

    在Erlang mode中,还可以进行一些其他的配置,例如设置Erlang shell的节点名、添加Erlang函数到imenu菜单等。 readers可以根据需要进行相应的配置。 搭建Erlang开发环境需要安装Erlang OTP、Emacs W32、Distel等...

    erlang_mysql编译好了

    - **查询执行**:执行SQL查询通常是通过调用特定的Erlang函数,传入SQL语句和可能的参数。返回的结果可以是记录集,也可以是受影响的行数。 - **事务处理**:Erlang MySQL库支持事务操作,允许你在一组操作中实现...

    erlang OTP Design Principles之Gen中文

    在Erlang OTP的Gen_Fsm中,这种转换通常由一系列Erlang函数来定义,这些函数作为回调函数实现状态机的逻辑。 例如,一个简单的密码锁可以被建模为一个FSM。初始状态是锁定的,每次按钮被按下都会产生一个事件。根据...

    erl_nif 扩展erlang的另外一种方法

    NIFs的调用速度比普通的Erlang函数快得多,因为它们绕过了Erlang VM的大部分开销。 使用`erl_nif`扩展Erlang的步骤通常包括以下几个阶段: 1. **编写C代码**:首先,你需要编写一个C库,包含要作为NIF公开的函数。...

    erts erlang api

    匹配规格类似于Erlang中的小型函数,但由Erlang运行时系统解释或编译成更高效的形式,而非调用Erlang函数。相对于真正的Erlang函数,匹配规格的功能较为有限。 ##### 2.2 匹配规格的结构 匹配规格通常包含两部分:...

    一个我自己学习Erlang的聊天室服务器及客户端代码

    2. Erlang-Java桥接库:为了方便Java与Erlang的交互,可能存在使用如Jinterface这样的库,它允许Java程序直接调用Erlang函数,或者通过Erlang的Port机制进行通信。 总结,这个项目展示了如何利用Erlang强大的并发和...

    ecg:Erlang函数调用图生成器

    ECG是E rlang函数C的所有图G enerator,其自动绘制函数调用和处理程序派生。 ECG利用Erlang强大的跟踪机制和可视化工具graphviz ,确保已安装graphviz ,并且由于此处使用Python绑定,因此还需要安装Digraph软件包。...

    Erlang_CNode用户指南

    CNode允许Erlang和C之间进行通信,包括消息传递、调用Erlang函数、接收Erlang数据类型等。这为需要高性能计算或利用现有C库的Erlang应用提供了便利。 **CNode的实现** 创建CNode首先需要编写一个Erlang接口模块,...

    erlCnpj:用于验证 CNPJ 编号的 Erlang 函数

    Erlang 是一种高效、轻量级且适合并发编程的函数式编程语言,常用于构建分布式系统。在给定的“erlCnpj”项目中,我们关注的是一个专门用于验证巴西联邦税号(CNPJ)有效性的功能模块。CNPJ(Cadastro Nacional da ...

    Thinking in Erlang

    ### 思维转换:从过程式到Erlang函数式编程 #### 引言 《思维转换:在Erlang中的函数式编程》是一本专为有经验的过程式开发人员编写的指南,旨在帮助他们过渡到Erlang这门独特的函数式编程语言。本书由罗伯特·...

    ohmyguard:erlang 函数保护的二进制模式匹配样式语法

    Erlang 二进制模式匹配是它最好的特性之一,也是它最简洁的语法,那么为什么不将它也应用于函数保护呢? 鉴于此功能: my_func ( Value ) when is_binary ( Value ) -&gt; Value . 可以简化为: my_func ( Value / ...

    erlang编程 Introducing Erlang

    Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心...

    pfun:Erlang 可移植函数

    乐趣提供跨多个节点的可移植功能对象和代码加载的库__可移植函数__的缩写概述目标是解决常规 Erlang 函数对象的以下问题:无法跨多个代码加载生存如果一个函数对象所属的模块被更新两次,持有该对象的进程就会崩溃以...

    rustler:用于创建Erlang NIF函数的Safe Rust桥

    开发者可以创建一个新的Rust crate,这个crate包含一系列的NIF函数,每个函数都映射到一个Erlang函数。Rustler会自动处理内存管理、错误处理和类型转换,确保NIF函数在Erlang VM中正确运行。 在Erlang应用中,这些...

Global site tag (gtag.js) - Google Analytics