Erlang 程式設計參考手冊(第一部分)

2022-08-18 17:21:10 字數 4500 閱讀 8306

erlang 程式設計參考手冊(第一部分)

2 資料型別

2.1 項term

erlang提供了一組資料型別,我們將在本章節中逐個認識。某種資料型別的乙個例項稱為乙個項。

2.2 數值number

這裡有兩種數值型別,整型和浮點型。除了一些常見的轉換外,erlang還有兩種特殊的轉換形式:

$char

獲取字元的ascii碼。

base#value

base進製(進製的範圍為2到36的整數)。在erlang 5.2/otp r9b和早前的版本中,這個範圍較小,只能是2到16.

例子:1> 42.

422> $a.

653> $\n.

104> 2#101.

55> 16#1f.

316> 2.3.

2.30000

7> 2.3e3.

2300.00

8> 2.3e-3.

2.30000e-3

2.3 常量atom

乙個常量可以看作乙個詞條,而且該詞條就是它的名稱。乙個常量如果不是以小寫字元開始或者包含其他字元(例如數字、_、@等)則應該是使用單引號包起來。

例子:hello

phone_number

'monday'

'phone number'

2.4 位元式binary

乙個位元式用來儲存沒有型別的記憶體資料。

位元式被表示成為位元的直接形式。

例子:1> <<10,20>>.

<<10,20>>

2> <<"abc">>.

<<65,66,67>>

更多的例子可以稍等一段時間,會有程式設計例子放出。

2.5 引用reference

乙個引用是在erlang執行時系統中的乙個唯一的項,通過make_ref/0建立。

2.6 函式項fun

乙個函式項是乙個函式化物件。它可以建立乙個匿名函式,並且傳遞函式自身,作為另乙個函式的引數。

例子:1> fun1 = fun (x) -> x 1 end.

#fun

2> fun1(2).

3在程式設計例子中會有更多的fun表示式例子,敬請期待。

2.7 埠識別符號port identifier

乙個埠識別符號就是乙個erlang埠。open_port/2,被用來建立埠,將返回該型別的乙個值。

2.8 程序id pid

乙個程序識別符號pid,spawn/1,2,3,4,spawn_link/1,2,3,4,和spawn_opt/4,都可以用來建立程序,返回乙個該型別的值。例子:

1> spawn(m, f, ).

<0.51.0>

內建函式 self() 返**用程序的pid,例子:

-module(m).

-export([loop/0]).

loop() ->

receive

who_are_you ->

io:format("i am ~p~n", [self()]),

loop()

end.

1> p = spawn(m, loop, ).

<0.58.0>

2> p ! who_are_you.

i am <0.58.0>

who_are_you

2.9 元組tuple

帶有確定數量的項的復合資料型別:

其中每個項都被稱為元素。元素的數量就是該元組的大小。

有很多操作元組的函式。

例子:1> p = }.

}2> element(1,p).

adam

3> element(3,p).

4> p2 = setelement(2,p,25).

}5> size(p).

36> size({}).

02.10 列表list

帶有不定長項的復合資料型別。

[term1,...,termn]

其中的每一項都稱為乙個元素。元素的數量就是這個列表的長度。

形式上,乙個列表可以是空列表或者是乙個有頭元素和尾元素的列表。可以使用[h|t]對列表進行劃分。列表[term1,...,termn]其實可以被表示為[term1|[...|[termm|]]。

例子: is a list, thus

[c|] is a list, thus

[b|[c|]] is a list, thus

[a|[b|[c|]]] is a list, or in short [a,b,c].

尾部是乙個列表的列表有時候稱為proper list嚴格列表。當然,尾部不是列表的列表,例如[a|b]也是合法的。在實際中,我們使用單列表可能更多一點。

例子:1> l1 = [a,2,].

[a,2,]

2> [h|t] = l1.

[a,2,]

3> h.

a4> t.

[2,]

5> l2 = [d|t].

[d,2,]

6> length(l1).

37> length().

0一組操作列表的函式可以在stdlib中的模組lists中找到。

2.11 字串string

字串使用雙引號引起,但是並不是乙個單獨的erlang資料型別。erlang系統內部是使用[$h,$e,$l,$l,$o]來表示字串"hello"的,也就是[104,101,108,108,111]。

兩個臨近的字串可以被鏈結為乙個字串。這是在編譯時完成的,而非執行時。例子:

"string" "42"

等效於:

"string42"

2.12 記錄record

乙個記錄是乙個資料結構,用來儲存定長的元素組。它有乙個命名域,這一點與c語言相同。儘管如此,記錄並不是乙個真正意義上的資料型別。記錄被erlang表示為元組表示式,這也是在編譯時完成的。因此,記錄表示式並沒有被erlang所真正「認識」,除了某些特殊的操作。

例子:-module(person).

-export([new/2]).

-record(person, ).

new(name, age) ->

#person.

1> person:new(ernie, 44).

2.13 布林boolean

在erlang中沒有布林值。而是使用常量true和false來表示。

例子:1> 2=<3.

true

2> true or false.

true

2.14 轉義字元escape sequences

下面是一些可以被使用的轉義字元:

recognized escape sequences.

描述\b

backspace

\d delete

\e escape

\f form feed

\n newline

\r carriage return

\s space

\t tab

\v vertical tab

\xyz, \yz, \z

character with octal representation xyz, yz or z

\^a...\^z

\^a...\^z

control a to control z

\' single quote

\" double quote

\\ backslash

2.15 型別轉換type conversions

下面是一些用來進行型別轉換的內建函式:

1> atom_to_list(hello).

"hello"

2> list_to_atom("hello").

hello

3> binary_to_list(<<"hello">>).

"hello"

4> binary_to_list(<<104,101,108,108,111>>).

"hello"

5> list_to_binary("hello").

<<104,101,108,108,111>>

6> float_to_list(7.0).

"7.00000000000000000000e 00"

7> list_to_float("7.000e 00").

7.00000

8> integer_to_list(77).

"77"

9> list_to_integer("77").

7710> tuple_to_list().

[a,b,c]

11> list_to_tuple([a,b,c]).

12> term_to_binary().

<<131,104,3,100,0,1,97,100,0,1,98,100,0,1,99>>

13> binary_to_term(<<131,104,3,100,0,1,97,100,0,1,98,100,0,1,99>>).

VBS程式設計教程第一部

發現大部分黑白的朋友都不會程式設計,這可不是件好事,所以這次我就寫了乙個簡單的程式設計教程,講一下vbscript.主要面向菜鳥,懂得程式設計的朋友就不要浪費時間了,如果你想接觸以下vbscript也可以,但既然有程式設計基礎推薦直接去找一些參考書來讀,會比較快.什麼是vbscript呢?vbscr...

Oracle部署第一部曲

1 無法用所有預設使用者登入sql plus 解決方案 執行 cmd 鍵入命令 sqlplus as sysdba 2 查詢資料庫中所有使用者 select username from dba users 3 查詢資料庫中所有表空間 select from sys.dba tablespaces 4...

Camera Link 標準解讀第一部

本篇將從物理介面 模式配置,傳輸協議 訊號時序,已經硬體設計和邏輯實現等方面介紹cameralink標準。camera link是一種序列通訊協議標準,基於national semiconductor介面channnel link 簡稱 c link,與2000年 在美國自動化冬夜學會aia的推動下...