Erlang 分支结构程序与保护式

在大多数程序设计语言中,都会具有分支结构的程序语法,即if语句和case语句。Erlang 语言中也有if语句和case语句。

一、if语句

基本格式如下:

if
    Guard1 -> exp1,exp2;
    Guard2 -> expa,expb;
    ...
end
Guard1,Guard2依次进行计算,如果有一个为true,则计算其后的各个表达式。但如果没有一个为true则会引发错误。所以,有时会在最后添加如下分支:

true -> "error ..."
true之前没有为真的话,该分支会执行,而不会引发错误。

以下是一个测试返回奇偶数标志的if语句:

if
X rem 2 == 1 -> odd;
X rem 2 == 0 ->even
end.
二、case语句

基本格式如下:

case exp of
    Pattern1 -> exp1,exp2;
    Pattern2 -> expa,expa;
    ....
end.
该语句在执行时,首先计算exp的值,然后用exp的结果依次与Pattern1、Pattern2进行模式匹配,成功则计算其后的表达式;和if语句类似的是,如果没有一个分支的模式匹配成功,则会引发错误。因此,有时会添加一个任何情况下都会匹配的分支,主要有以下两种形式:

1. _ ->"error...."

2. Other -> "...."

if语句和case语句通常是可以互换的,即if可以实现的功能,case也可以实现。如何选用,那要看具体情况。

三、保护式

在前面介绍函数中的模式匹配时提到,通过模式匹配可以达到选择函数的某个子句执行,但模式匹配不能实现数值大小与数值类型的选择。而我们可以使用保护式来实现这个功能。

如在定义某个函数时,要求传入变量的值必须大于0,否则返回错误,你可以这样写:

myfun(X) when X>0 ->
    ...;
myfun(X) -> "error".
当传入的参数值不大于0时,第一个子句因保护式的作用而不被执行,实际会执行第二个子句。

保护式还可以包含多个保护条件,如果多个条件之间是用‘,’分隔,则多个条件全成立,结果为true。如果多个条件之间用‘;’分隔,则只要有一个条件为true,结果为true。

如果在保护式中需要指定数据类型,则可以可使用Erlang中的内建函数来对数据的类型进行判断,如is_atom/1、is_tuple/1等,当然条件中还可以使用算术运算符、比较运算符、布尔表达式等。这里就不一一举例说明了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值