mathexp({sum, N,M}) -> N+M ;
mathexp({sub, N,M}) -> N-M ;
mathexp({square, N}) -> N*N.
分号是每个函数定义之间的 “或” 操作符。使用模式匹配评估函数的参数,所以如果把包含三个元素的元组提供给mathexp()函数,模式匹配会失败。
Erlang 中的函数还可以接受不同数量的参数。Erlang 会执行模式匹配,直到找到有效的函数定义,从而选择适当的函数定义。函数的参数数量称为元数 (arity),用于帮助标识函数。
调用时输入23和24.5,输入的这2个参数才是真正需要传递给函数的参数,ref int, ref double是告诉alien需要分配空间,调用c函数从栈中获取它的参数,调用结束后将返回结果放到栈中(为了区分返回结果和栈中的其他的值,每个c函数还会返回结果的个数),然后lua函数返回结果值。但当母函数和其闭包都定义了参数时,由于在母函数体外是无法直接对闭包进行函数调用的,为了能够实现对闭包的调用,需要在母函数内增加一条返回闭包函数名本身的语句,这个时候调用母函数后返回的是一个闭包的函数对象,就可以通过这种方法间接调用闭包函数了。### grepl函数与grep函数不同的地方在于返回的形式是否为布尔值(是 true 或 false 中的一个),grepl返回ture或者false,而grep函数返回匹配值下标或者匹配值本身,使用什么函数要看我们的需要。
任何函数的返回值都是子句(在我们的示例中只有一行)中最后一个表达式的结果。注意,只有在找到了匹配项且变量是函数局部变量的情况下,才会为变量赋值。
与其他语言中的模块一样,模块用于把相似的函数集中在一起。
在文件中指定模块名(必须与文件名匹配),然后指定模块中希望导出到装载此模块的其他程序的函数。例如,给出了文件 fib.erl,其中包含 fib 模块的定义。
-module(fib).
-export([fibo/1, printfibo/1]).
%% print fibo arg. and result, with function as parameter
printfibo(N) ->
Res = fib:fibo(N),
io:fwrite("~w ~w~n", [N, Res]).
fibo(0) -> 0 ;
fibo(1) -> 1 ;
fibo(N) when N > 0 -> fibo(N-1) + fibo(N-2) .
模块声明位于-module()行中。-export()行包含要导出的函数的列表。每个函数的定义都给出了函数名和函数的元数,以便您能导出函数的特定定义。
要使用模块,则需要编译并装载模块。可以在 shell 中使用c()语句完成这个步骤,参见。
1> c(fib).
{ok,fib}
2> fib:printfibo(9).
9 34
ok
注意,函数调用包含模块名,从而确保调用的是 fib 模块中的printfibo()函数。
Erlang 的结构和格式与大多数其他语言有很大区别。尽管许多数据类型和基本的表达式是相同的,但是它们的用法和应用不太一样。变量只能赋值一次,通过模式匹配系统对不同的表达式进行运算,这些特性给典型的语言环境提供了一些强大的扩展。例如,可以为同一函数定义多种处理方式,还可以对递归调用应用模式匹配,这样做可以简化某些函数。
节 主体部分的写作要求第五节 新闻结尾第六章 新闻背景第一节 新闻要交代背景第二节 背景材料的类别和作用第三节 运用背景材料的原则和要求第四节 背景材料的位置安排要灵活第七章 不同类型消息的写作第一节 动态消息第二节 简讯第三节 特写性消息第四节 评述性消息第五节 经验性消息第六节 综合消息第七节 人物消息第八章 通讯的特点第一节 通。是迄今为止,我用过所有所见即所得网站构建器中唯一一款功能最强大,开发速度最快的网站制作工具,网上的 web page maker 和 dynamic html editor 功能都没有它的强大。sql履行进程即是逐层解析的进程,其间relationalengine中的优化器,是根据成本的(cbo),其作业进程跟oracle是十分类似的。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-106685-3.html
棒棒哒
不断的去选择才好
那索罗斯