欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

erlang的函数

程序员文章站 2022-07-14 09:53:44
...

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诡异的语法,觉得这个是不是很容易理解了。