`
somefuture
  • 浏览: 1079008 次
  • 性别: 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
分享到:
评论

相关推荐

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

    erlCnpj 用于检查 CNPJ 编号的 Erlang 函数。 CNPJ 是用于识别商业实体的巴西联邦税号。 例如:cnpj:isValid("03351287000192") -&gt; true

    erlang入门学习经典资料(很不错)

    很不错的erlang学习资料。推荐刚上手的同学下载学习。

    ecg:Erlang函数调用图生成器

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

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

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

    pfun:Erlang 可移植函数

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

    basho_bench:一种负载生成和测试工具,基本上可以为您编写返回的Erlang函数

    basho_bench 概述 :: Basho Bench是一种基准测试工具,旨在进行准确且可重复的性能测试和压力测试,并生成性能图。 它最初是为了对Riak进行基准测试而开发的,它公开了可插拔的驱动程序接口,并已扩展为在各种项目...

    luerl:Lulang in Erlang

    主机程序可以调用函数来执行一段Lua代码,可以编写和读取Lua变量,还可以通过Lua代码来调用Erlang函数。 通过使用Erlang函数,可以增强Luerl的功能,以应对各种不同的领域,从而创建共享语法框架的自定义语言。 ...

    meta:Erlang的基本元编程

    编译后,使用普通的Erlang函数和表达式(在这种情况下在编译时求值)将这些位置转换为Erlang代码片段。 即使可以直接操作Erlang AST,在很多情况下,引用/拼接机制也可以极大地简化此类操作。快速入门示例要使用...

    基于ErlangC函数的Oracle性能预测和分析.pdf

    基于ErlangC函数的Oracle性能预测和分析.pdf

    windows下安装Erlang环境

    Erlang 里面的函数是数学里面的函数:必须有返回值。 只要是函数必然有返回值,函数是一个过程,以英文的句号为函数结束符。 函数结束之前的表达式就是该函数的返回值。 所以这也是在 Erlang 里面的函数不会看到任何...

    erlang入门级练习:LeetCode OJ问题的部分erlang 源码

    我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的...个人认为dungeon_game这个题目解题逻辑很体现erlang的函数式的思维逻辑

    purity:Erlang的副作用分析仪

    纯度是一种静态分析仪,它确定Erlang函数的纯度。 通过简单的API,它可以用作独立应用程序或用作其他应用程序的一部分。 安装 在获取源代码的副本后, git clone git://github.com/mpitid/purity.git 更改为purity...

    introducing erlang

    Erlang特性: ● 并发性 - Erlang支持超大量级的并发进程,并且不需要操作系统具有并发机制。 ● 分布式 - 一个分布式Erlang系统是多个Erlang节点组成...●函数式编程 ●动态类型 ●及早求值或严格求值 ●支持脚本运行

    Erlang(32,64)安装程序

    Erlang(['ə:læŋ])是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动...顺序执行的Erlang是一个及早求值, 单次赋值和动态类型的函数式编程语言

    Erlang趣学指南

    (494页带目录的高清扫描版) 这是一本讲解Erlang编程语言的入门指南,内容通俗...内容涉及模块、函数、类型、递归、错误和异常、常用数据结构、并行编程、多处理、OTP、事件处理,以及所有Erlang的重要特性和强大功能。

    Erlang编程指南

    Erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商...在编程范型上,Erlang属于多重范型编程语言,涵盖函数式、并发式及分布式。顺序执行的Erlang是一个及早求值, 单次赋值和动态类型的函数式编程语言。

    erlang启动多节点,跨节点调用函数

    1.完成makefile,直接运行/script目录中的makefile.cmd就能编译文件 2.完成启动多节点的脚本,运行/script目录中的run.cmd可以启动3个节点,...3.完成跨节点函数的调用,记录日志都会在gm节点中执行 4.完成日志记录系统

    erlang api 最新资源

    在 Erlang的函数中 某些语法中 我们可以使用 Pattern匹配 这是一个非常好的特性 我们可以让代码自己去决定如何执行: 比如 我们定义一个函数 其告诉我们某种水果的价格 : price apple &gt; 2 0; price banana &gt...

    goldrush:淘金热

    Goldrush是一款小型Erlang应用程序,可提供快速的事件流处理事件处理已编译到查询模块每个模块的私人事件处理统计信息查询模块逻辑可以组合用于任何/所有过滤器可以...,可以使用一个或多个erlang函数覆盖输出动作...

Global site tag (gtag.js) - Google Analytics