当前位置: 首页 > news >正文

Erlang几种判断语句:if、case等

Erlang有几种常用的判断结构语句,如if、case等。本篇侧重介绍其特点,以及用例说明

1、if 结构

if 
    Condition 1 -> 
        Action 1; 
    Condition 2 -> 
        Action 2; 
    Condition 3 -> 
        Action 3; 
    Condition 4 -> 
        Action 4 
end
Erlang是这样工作的:先对Condition 1求值,如值为true,那么将执行Action 1,并跳出该结构。若Condition 1不成功,那么就继续对Condition 2求职,以此类推,直到有条件成功。在if结构中,知道要有一个结果为true,否则Erlang就会抛出一个异常。通常if语句的最后一个条件会是原子true,表示如果没有匹配的条件的话,应该做什么动作。

2、 case 结构

case Condition of 
     Result 1 ->
           Action 1;      
     Result 2 ->
           Action 2;
     Result 3 ->
           Action 3
end

Erlang是这样工作的:首先,对Condition进行求值,然后将结果依次对Result 1、Result 2等进行匹配,直到找到可以匹配的分支。我们可以把变量_放到最下面的条件层,用来处理没有匹配条件要执行的动作。

3、guard 结构

max(X, Y) when X > Y -> X;
max(X, Y) -> Y.
守卫(guard)是一种用于强化模式匹配功能的结构。如果点第一个子句不匹配,那么erlang会尝试匹配第二个子句。


下面简单写了一个例子来说明:

-module(compare).

-export([compare/2, compare2/2, compare3/2]).

%% if 语句
compare(A, B) ->
	if A > B ->
			io:format("~p > ~p~n", [A, B]);
	   A < B ->
			io:format("~p < ~p~n", [A, B]);
	   true ->
			io:format("~p = ~p~n", [A, B])
	end.

%% guard 语句
compare2(A, B) when A > B ->
	io:format("~p > ~p~n", [A, B]);
compare2(A, B) when A < B ->
	io:format("~p < ~p~n", [A, B]);
compare2(A, B) ->
	io:format("~p = ~p~n", [A, B]).

%% case 语句
compare3(A, B) ->
	case A > B of
		true ->
			io:format("~p > ~p~n", [A, B]);
		_ ->
			case A < B of
				true ->
					io:format("~p < ~p~n", [A, B]);
				_ ->
					io:format("~p = ~p~n", [A, B])
			end
	end.

相关文章:

  • (pojstep1.3.1)1017(构造法模拟)
  • 新视野OJ 2190 [SDOI2008]仪仗队 (数论-gcd)
  • WinForm_2一个简单实用的小应用——桌面时钟
  • 数据分析工程师笔试题:计算平均数的指标及其优缺点
  • 新视野OJ 2005 [Noi2010]能量采集 (数论-gcd)
  • Python 入门教程 17 ---- Introduction to Classes
  • HDU 4288 Coder 【线段树+离线处理+离散化】
  • 近期刷题的c语言总结。
  • 程序员看婚姻
  • Python 入门教程 18 ---- File Input/Output
  • 【职业】致迷茫的大学生们
  • (poj1.3.2)1791(构造法模拟)
  • 微软云技术Windows Azure专题(五):如何将WCF服务部署在Windows Azure上
  • 『Asp.Net 组件』Asp.Net 服务器组件 内嵌JS:让自己的控件动起来
  • 『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件
  • __proto__ 和 prototype的关系
  • Druid 在有赞的实践
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • opencv python Meanshift 和 Camshift
  • React Native移动开发实战-3-实现页面间的数据传递
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • SQLServer插入数据
  • 分享一份非常强势的Android面试题
  • 爬虫模拟登陆 SegmentFault
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 数据可视化之 Sankey 桑基图的实现
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • HanLP分词命名实体提取详解
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • # Maven错误Error executing Maven
  • #数学建模# 线性规划问题的Matlab求解
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (十六)串口UART
  • (一)RocketMQ初步认识
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转载)虚函数剖析
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • 、写入Shellcode到注册表上线
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net 获取url的方法
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net访问oracle数据库性能问题
  • .NET关于 跳过SSL中遇到的问题
  • .net快速开发框架源码分享
  • .net中我喜欢的两种验证码
  • .sdf和.msp文件读取
  • /var/log/cvslog 太大
  • @Autowired注解的实现原理
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [Angular] 笔记 21:@ViewChild
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [BUUCTF]-Reverse:reverse3解析