首页 > 其他 > 详细

LYSE-函数语法

时间:2015-11-26 10:54:11      阅读:235      评论:0      收藏:0      [点我收藏+]

模式匹配

函数声明可以由函数从句构成。

函数从句用";"分隔。

几个函数通过模式匹配,实现分支逻辑。

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]).

 

io:fromat使用标记来格式化字符串的输出。

一些常用的标记:

  ~n 换行

  ~s 代表后面的string或bitstring参数

  ~p 按标准格式打印Erlang代码

io:format("~s~n",[<<"Hello">>]).

io:format("~p~n",[<<"Hello">>]).

io:format("~~~n").

io:format("~f~n", [4.0]).

io:format("~30f~n", [4.0]).

 

守卫

为了匹配一个区间值,可以使用守卫:

old_enough(X) when X >= 16 -> true;
old_enough(_) -> false.

与逻辑的守卫:

right_age(X) when X >= 16, X =< 104 ->
true;
right_age(_) ->
false.

或逻辑的守卫:

wrong_age(X) when X < 16; X > 104 ->
true;
wrong_age(_) ->
false.

在守卫表达式中,","相当于andalso,";"相当于orelse。

但也有区别。

  ","、";"会捕获异常,而andalso、orelse不会。

  在"A;B"中,A抛出异常,会继续对B求值,如果B为真会返回真。

  在"A orelse B"中,A抛出异常,则守卫表达式不匹配。

 

  而只有andalso、orelse可以在守卫表达式中嵌套使用。

  即可以写:(A orelse B) andalso C

  不可以写:(A;B),C

 

if语句

%% note, this one would be better as a pattern match in function heads!
%% I‘m doing it this way for the sake of the example.
help_me(Animal) ->
Talk = if Animal == cat  -> "meow";
Animal == beef -> "mooo";
Animal == dog  -> "bark";
Animal == tree -> "bark";
true -> "fgdadfgna"
end,
{Animal, "says " ++ Talk ++ "!"}.

 

case语句

insert(X,[]) ->
[X];
insert(X,Set) ->
case lists:member(X,Set) of
true  -> Set;
false -> [X|Set]
end.

复杂一点的

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.

 

LYSE-函数语法

原文:http://www.cnblogs.com/sqxy110/p/4996917.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!