內建函式 (bif)
內建函式是指那些出於某種需求而內建到 erlang 虛擬機器中的函式。內建函式常常實現那些在 erlang 中不容易實現或者在 erlang 中實現效率不高的函式。某些內建函式也可以只用函式名就呼叫,因為這些函式是由於預設屬於 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
所以,2000 年為閏年。接下來兩個 trunc 測試例子判斷年份是否可以被 100 或者 4 整除。 首先第乙個 if 語句返回 leap 或者 not_leap,該值儲存在變數 leap 中的。這個變數會被用到後面 feb 的條件測試中,用於計算二月份有多少天。
這個例子演示了 trunc 的使用方法。其實,在 erlang 中可以使用內建函式 rem 來求得餘數,這樣會簡單很多。示例如下:
74> 2004 rem 400.
所以下面的這段**也可以改寫:
trunc(year / 400) * 400 == year ->
leap;
可以被改寫成:
year rem 400 == 0 ->
leap;
erlang 中除了 trunc 之外,還有很多的內建函式。其中只有一部分可以用在 guard 中,並且你不可以在 guard 中使用自定義的函式 ( 參考 guard 序列 )。(高階話題:這不能保證 guard 沒有***)。讓我們在 shell 中測試一些內建函式:
75> trunc(5.6).
76> round(5.6).
77> length([a,b,c,d]).
78> float(5).
5.079> is_atom(hello).
true
80> is_atom("hello").
false
81> is_tuple(}).
true
82> is_tuple([paris, ]).
false
所有的這些函式都可以用到 guard 條件測試中。下現這些函式不可以用在 guard 條件測試中:
83> atom_to_list(hello).
"hello"
84> list_to_atom("goodbye").
goodbye
85> integer_to_list(22).
"22"
這三個內建函式可以完成型別的轉換。要想在 erlang 系統中(非 erlang 虛擬機器中)實現這樣的轉換幾乎是不可能的。
python的35個常見內建函式 BIF
bif dir builtins print len bif 152個內建函式 35個常用內建函式 1.abs 求絕對值 模 a 1 b 3 4j print abs a print abs b 2.bin 把整數轉為二進位制串表示形式 c 16 print bin c 3.complex real...
Python 序列常用BIF 內建方法
python中有四種內建的資料結構,即列表 元組 字典 集合,其實都屬於 序列。list literable 把乙個可迭代的物件轉換為列表 tuple iterable 把乙個可迭代的物件轉換為元祖 str obj 把obj物件轉換為字串 len sub 返回sub引數的長度 max 序列或者引數集...
python重寫內建函式 python 內建函式
說明 zip 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 號操作符,可以將元組解壓為列表。語法 zip iterable1,iterable2,引數 iterable 乙個或多...