首页 > Erlang快速入门 > 3.12 Erlang快速入门之内置函数
2013
11-01

3.12 Erlang快速入门之内置函数

内置函数BIFs
内置函数Bifs是一些处于某些理由构建在Erlang虚拟机内部的函数。BIFs常常实现功能性的操作,而这些操作可能是很难在Erlang中直接实现的,或者说是实现起来没有效率的。一些BIFs可以被通过函数名进行调用,它们这时是默认属于Erlang模块的,例如上面看到的trunc函数其实是erlang:trunc。
如你所见,我们首先找出某一年是否是闰年。如果某一年可以被400整除,则是闰年。为了找到能被400整除的年份,我们使用了内建函数trunc来将小数部分切割掉。我们然后再乘上400,看看是否可以恢复原来的数值,例如,对于2004年来说:
2004 / 400 = 5.01
trunc(5.01) = 5
5 * 400 = 2000
我们看到得到的是2000而不是2004,所以我们知道了2004并不能被400整除。再看看2000年:
2000 / 400 = 5.0
trunc(5.0) = 5
5 * 400 = 2000
于是,这就的到一个闰年了。接下来的两个测试是如果可以被100或者4整除,也是闰年,实现的过程很类似。第一个if返回leap或者not_leap(当时闰年的时候返回leap)。我们使用这个变量来界定二月份的日期长度情况。
这个例子展示了如何使用trunc函数,我们使用另外一个操作符rem能够轻松的得到余数,看例子:
2> 2004 rem 400.
4
我们写的是:
trunc(Year / 400) * 400 == Year ->
leap;
改写为:
Year rem 400 == 0 ->
leap;
这里有很多的内建函数BIFs,但是只有一些BIFs可以作为界定来使用,并且你不能使用自定义的函数作为界定。(对于高级一点的读者:这里需要注意界定是没有副作用的)。让我们看看这些BIFs是怎样的:

78> trunc(5.6).
5
79> round(5.6).
6
80> length([a,b,c,d]).
4
81> float(5).
5.00000
82> is_atom(hello).
true
83> is_atom("hello").
false
84> is_tuple({paris, {c, 30}}).
true
85> is_tuple([paris, {c, 30}]).
false  

上面的所有BIFs都可以作为界定。而下面的这些则不行:

87> atom_to_list(hello).
"hello"
88> list_to_atom("goodbye").
goodbye
89> integer_to_list(22).
"22"    

上面的3个BIFs可以帮助我们完成一些在Erlang中很困难甚至是不可能的任务。


3.12 Erlang快速入门之内置函数》有 1 条评论

  1. hell8088 说:

    这里还是不太明白,“界定“的函数和“不能界定”的函数差别是什么,这里的界定怎么解释呢?

留下一个回复

你的email不会被公开。