商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

Erlang编程入门之内建函数BIFs

作者:来自ITPUB论坛  2008-01-30

  【IT168 技术文档】内建函数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中很困难甚至是不可能的任务。

1
【内容导航】
第1页: Erlang编程入门之内建函数BIFs
©版权所有。未经许可,不得转载。
[责任编辑:cynthia]