zoukankan      html  css  js  c++  java
  • erlang判断语法结构:if/case/guard

    erlang 有好几种常用的判断结构语句,如 if、case、guard 等。文章将分别对 if / case /guard 的特点做介绍,以及用例说明

    1、if 结构

    [plain] view plaincopy
     
    1. if   
    2.     Condition 1 ->   
    3.         Action 1;   
    4.     Condition 2 ->   
    5.         Action 2;   
    6.     Condition 3 ->   
    7.         Action 3;   
    8.     Condition 4 ->   
    9.         Action 4   
    10. end  

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

    2、 case 结构

    [plain] view plaincopy
     
    1. case Condition of   
    2.      Result 1 ->  
    3.            Action 1;        
    4.      Result 2 ->  
    5.            Action 2;  
    6.      Result 3 ->  
    7.            Action 3  
    8. end  

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

    3、guard 结构

    [plain] view plaincopy
     
    1. max(X, Y) when X > Y -> X;  
    2. max(X, Y) -> Y.  

    守卫(guard)是一种用于强化模式匹配功能的结构。如果点第一个子句不匹配,那么erlang会尝试匹配第二个子句。通常把没有任何限定条件的函数放最下面,用来处理没有匹配条件要执行的动作。

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

    [plain] view plaincopy
     
      1. -module(compare).  
      2.   
      3. -export([compare/2, compare2/2, compare3/2]).  
      4.   
      5. %% if 语句  
      6. compare(A, B) ->  
      7.     if A > B ->  
      8.             io:format("~p > ~p~n", [A, B]);  
      9.        A < B ->  
      10.             io:format("~p < ~p~n", [A, B]);  
      11.        true ->  
      12.             io:format("~p = ~p~n", [A, B])  
      13.     end.  
      14.   
      15. %% guard 语句  
      16. compare2(A, B) when A > B ->  
      17.     io:format("~p > ~p~n", [A, B]);  
      18. compare2(A, B) when A < B ->  
      19.     io:format("~p < ~p~n", [A, B]);  
      20. compare2(A, B) ->  
      21.     io:format("~p = ~p~n", [A, B]).  
      22.   
      23. %% case 语句  
      24. compare3(A, B) ->  
      25.     case A > B of  
      26.         true ->  
      27.             io:format("~p > ~p~n", [A, B]);  
      28.         _ ->  
      29.             case A < B of  
      30.                 true ->  
      31.                     io:format("~p < ~p~n", [A, B]);  
      32.                 _ ->  
      33.                     io:format("~p = ~p~n", [A, B])  
      34.             end  
      35.     end.  
  • 相关阅读:
    ERROR 1406 : Data too long for column 解决办法
    Sublime配置Python编译环境
    python下载包的时候,如何选择是win32,还是amd64的,其中的cp又是什么意思?
    曝光一个网站,我周末就耗在上面了。(学习)
    Matlab 画图时中文显示乱码的问题?(设置为“桌面代码”修改时区后还是乱码使用这个方法)
    什么是前端和后端开发,看完你就知道了
    彻底卸载mysql 个人亲测!
    python语言的优缺点
    阿里云、华为云和腾讯云等多家物联网平台的异同
    nfs Read only system 问题解决 + NFS 安装
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/4601869.html
Copyright © 2011-2022 走看看