在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 區(qū)塊鏈/ 內(nèi)置函數(shù) (BIF)
注冊(cè)進(jìn)程名稱
錯(cuò)誤處理
完整示例
分布式編程
消息傳遞
if 與 case
健壯性
映射 (Map)
高階函數(shù) (Fun)
輸出至終端
更多關(guān)于列表的內(nèi)容
內(nèi)置函數(shù) (BIF)
模塊與函數(shù)
將大程序分在多個(gè)文件中
匹配、Guards 與變量的作用域
超時(shí)
列表
完整示例
頭文件
標(biāo)準(zhǔn)模塊與使用手冊(cè)
進(jìn)程
記錄
增加健壯性后的完整示例
Erlang Shell
原子類型

內(nèi)置函數(shù) (BIF)

內(nèi)置函數(shù)是指那些出于某種需求而內(nèi)置到 Erlang 虛擬機(jī)中的函數(shù)。內(nèi)置函數(shù)常常實(shí)現(xiàn)那些在 Erlang 中不容易實(shí)現(xiàn)或者在 Erlang 中實(shí)現(xiàn)效率不高的函數(shù)。某些內(nèi)置函數(shù)也可以只用函數(shù)名就調(diào)用,因?yàn)檫@些函數(shù)是由于默認(rèn)屬于 erlang 模塊。例如,下面調(diào)用內(nèi)置函數(shù) trunc 等價(jià)于調(diào)用 erlang:trunc。

如下所示,判斷一個(gè)是否為閏年。如果可以被 400 整除,則為閏年。為了判斷,先將年份除以 400,再用 trunc 函數(shù)移去小數(shù)部分。然后,再將結(jié)果乘以 400 判斷是否得到最初的值。例如,以 2004 年為例:

2004 / 400 = 5.01
trunc(5.01) = 5
5 * 400 = 2000

2000 年與 2004 年不同,2004 不能被 400 整除。而對(duì)于 2000 來說,

2000 / 400 = 5.0
trunc(5.0) = 5
5 * 400 = 2000

所以,2000 年為閏年。接下來兩個(gè) trunc 測(cè)試?yán)优袛嗄攴菔欠窨梢员?100 或者 4 整除。 首先第一個(gè) if 語句返回 leap 或者 not_leap,該值存儲(chǔ)在變量 Leap 中的。這個(gè)變量會(huì)被用到后面 feb 的條件測(cè)試中,用于計(jì)算二月份有多少天。

這個(gè)例子演示了 trunc 的使用方法。其實(shí),在 Erlang 中可以使用內(nèi)置函數(shù) rem 來求得余數(shù),這樣會(huì)簡(jiǎn)單很多。示例如下:

74> 2004 rem 400.
4

所以下面的這段代碼也可以改寫:

trunc(Year / 400) * 400 == Year ->
    leap;

可以被改寫成:

Year rem 400 == 0 ->
    leap;

Erlang 中除了 trunc 之外,還有很多的內(nèi)置函數(shù)。其中只有一部分可以用在 guard 中,并且你不可以在 guard 中使用自定義的函數(shù) ( 參考 guard 序列 )。(高級(jí)話題:這不能保證 guard 沒有副作用)。讓我們?cè)?shell 中測(cè)試一些內(nèi)置函數(shù):

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

所有的這些函數(shù)都可以用到 guard 條件測(cè)試中。下現(xiàn)這些函數(shù)不可以用在 guard 條件測(cè)試中:

83> atom_to_list(hello).
"hello"
84> list_to_atom("goodbye").
goodbye
85> integer_to_list(22).
"22"

這三個(gè)內(nèi)置函數(shù)可以完成類型的轉(zhuǎn)換。要想在 Erlang 系統(tǒng)中(非 Erlang 虛擬機(jī)中)實(shí)現(xiàn)這樣的轉(zhuǎn)換幾乎是不可能的。

上一篇:超時(shí)下一篇:模塊與函數(shù)