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诡异的语法,觉得这个是不是很容易理解了。
相关推荐
标签“FP Erlang 函数式编程”进一步强调了本书的主题,即围绕Erlang函数式编程语言展开。函数式编程是一种编程范式,它将计算视作数学函数的评估,并避免改变状态和可变数据。Erlang语言特别适合并发和分布式计算,...
Erlang函数调用新语法 - **概念**: R12B版本引入的新函数调用语法。 - **优点**: 更易于理解和维护。 - **应用场景**: 代码的热替换场景。 #### 21. Erlang消息监听器调试 - **工具**: `erl_snooper`。 - **功能**...
3. **Erlang数据类型和API**:介绍CNode API,包括如何在C中表示和操作Erlang的数据类型(如整数、原子、列表等),以及如何调用Erlang函数和处理返回结果。 4. **进程通信**:阐述如何在CNode中创建Erlang进程,...
在Erlang mode中,还可以进行一些其他的配置,例如设置Erlang shell的节点名、添加Erlang函数到imenu菜单等。 readers可以根据需要进行相应的配置。 搭建Erlang开发环境需要安装Erlang OTP、Emacs W32、Distel等...
- **查询执行**:执行SQL查询通常是通过调用特定的Erlang函数,传入SQL语句和可能的参数。返回的结果可以是记录集,也可以是受影响的行数。 - **事务处理**:Erlang MySQL库支持事务操作,允许你在一组操作中实现...
在Erlang OTP的Gen_Fsm中,这种转换通常由一系列Erlang函数来定义,这些函数作为回调函数实现状态机的逻辑。 例如,一个简单的密码锁可以被建模为一个FSM。初始状态是锁定的,每次按钮被按下都会产生一个事件。根据...
NIFs的调用速度比普通的Erlang函数快得多,因为它们绕过了Erlang VM的大部分开销。 使用`erl_nif`扩展Erlang的步骤通常包括以下几个阶段: 1. **编写C代码**:首先,你需要编写一个C库,包含要作为NIF公开的函数。...
匹配规格类似于Erlang中的小型函数,但由Erlang运行时系统解释或编译成更高效的形式,而非调用Erlang函数。相对于真正的Erlang函数,匹配规格的功能较为有限。 ##### 2.2 匹配规格的结构 匹配规格通常包含两部分:...
2. Erlang-Java桥接库:为了方便Java与Erlang的交互,可能存在使用如Jinterface这样的库,它允许Java程序直接调用Erlang函数,或者通过Erlang的Port机制进行通信。 总结,这个项目展示了如何利用Erlang强大的并发和...
ECG是E rlang函数C的所有图G enerator,其自动绘制函数调用和处理程序派生。 ECG利用Erlang强大的跟踪机制和可视化工具graphviz ,确保已安装graphviz ,并且由于此处使用Python绑定,因此还需要安装Digraph软件包。...
CNode允许Erlang和C之间进行通信,包括消息传递、调用Erlang函数、接收Erlang数据类型等。这为需要高性能计算或利用现有C库的Erlang应用提供了便利。 **CNode的实现** 创建CNode首先需要编写一个Erlang接口模块,...
Erlang 是一种高效、轻量级且适合并发编程的函数式编程语言,常用于构建分布式系统。在给定的“erlCnpj”项目中,我们关注的是一个专门用于验证巴西联邦税号(CNPJ)有效性的功能模块。CNPJ(Cadastro Nacional da ...
### 思维转换:从过程式到Erlang函数式编程 #### 引言 《思维转换:在Erlang中的函数式编程》是一本专为有经验的过程式开发人员编写的指南,旨在帮助他们过渡到Erlang这门独特的函数式编程语言。本书由罗伯特·...
Erlang 二进制模式匹配是它最好的特性之一,也是它最简洁的语法,那么为什么不将它也应用于函数保护呢? 鉴于此功能: my_func ( Value ) when is_binary ( Value ) -> Value . 可以简化为: my_func ( Value / ...
Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,旨在帮助初学者理解和掌握Erlang的核心...
乐趣提供跨多个节点的可移植功能对象和代码加载的库__可移植函数__的缩写概述目标是解决常规 Erlang 函数对象的以下问题:无法跨多个代码加载生存如果一个函数对象所属的模块被更新两次,持有该对象的进程就会崩溃以...
开发者可以创建一个新的Rust crate,这个crate包含一系列的NIF函数,每个函数都映射到一个Erlang函数。Rustler会自动处理内存管理、错误处理和类型转换,确保NIF函数在Erlang VM中正确运行。 在Erlang应用中,这些...