Erlang資料結構及流程控制

2021-09-01 08:30:08 字數 2335 閱讀 5304

資料結構反映乙個資料的內部構成。

資料的邏輯結構是指成分資料的邏輯關係,可分為單一型別和復合型別。

單一型別

數值整數 - 理論上允許是任意長度(只要不超過機器限制)

浮點數 64bit

原子 - 用單引號括起來

復合型別 - 可無限巢狀

元組 - 不適用於遞推

列表 - 可按序訪問(用|),適用於遞推

字串 - 是一種特殊的列表,用雙引號括起來

邏輯資料的賦值,由變數繫結實現。

邏輯資料的抽取,由模式匹配實現。

模式匹配中常用到佔位變數: _ 和 _var (區別是後者是實際變數,不能重複定義)

資料的物理結構是指資料在計算機內部的儲存形式。

二進位製流 - 用<< >>括起來,流不可以進行模式匹配這種複雜操作。

term - 可以表示任何型別的erlang資料

tuple_to_list, list_to_tuple只進行復合資料最外層的型別轉換,下層巢狀結構不變。

記錄record

記錄描述了元組的最外層資訊,用於批量建立元組。記錄可以定義在記錄檔案中,也可以定義在模組檔案中,乙個記錄檔案(.hrl)可以包含多個記錄。

-record(myrec,).

-record(myrec2,

}).**中常用-include_lib(file)來包含記錄資訊

shell中可以用rr(file), rr(file, rec), rr(file, rec, opt)等來讀取記錄資訊

二進位制數 形如 <>

list_to_binary(list)

list(必須是乙個整數型list!)轉成的是乙個普通的二進位制資料。

term_to_binary(term)

term可以是任何的erlang資料(甚至是二進位制資料)

binary_to_term(bin)

bin只能是由term轉換成的binary

由term資料轉成的二進位制資料,是一種特殊的所謂「外部資料格式」儲存的tlv結構(v可無限巢狀tlv')。

term資料: <<131,t>> (子資料的個數) +

原子: <<100,0>> +

字串: <<107,0>> +

整數: 保持不變

浮點數: <<99>> + (ascii碼表示,後面補'0')

元組:<<104>> +

列表:<<107,0>> +

t可以是 上述子型別任何一種(整數是97)

begin..end 塊

end只可用於函式體內

erlang的模組化是通過模組(.erl)來組織的

執行乙個模組,首先要編譯它,生成相應的二進位制檔案(.beam)

匿名函式fun,就是lamba

高階函式 - 允許傳入,使用,或返回匿名函式的函式。

下劃線變數 _var 比 _更具可讀性,但注意避免重複定義。

比較表示式:

> =< =:=

< >= =/=

匿名函式fun的引數可以採用模式匹配

f=fun

(5,y) -> 10*y;

(x,2) -> 3*x;

(x,y) -> 3*x + 10*y //兜底

end.

更強的一種做法是用斷言guard

when只可出現一次,但其可以使用與(逗號),或(分號)等關係,但不能使用自定義的關係表示式(難以保證其可以正確work)。

f=fun (x,y) when x>3; y<100, y>10

-> x + y

end.

函式體內的流程控制可以使用if/case表示式

ifbool1 -> expr1;

bool2 -> expr2;

true -> expr3 //兜底

endcase expr of

val1 -> expr1;

val2 -> expr2;

_ -> expr3 //兜底

enderlang異常

有三類: exit, error, throw.

exit是發生於系統(二進位制**)內部

error和exit區別不大,脫胎於exit,不同的一點是error會返回棧跟蹤,而exit無。往往被使用者用來截留exit訊號後作些改頭換面

throw發生於使用者源**,用於希望程式設計人員來處理的某類異常

trythrow({}),

erlang:error({}),

exit({})

catch

throw:x -> {};

error:x -> {};

exit:x -> {}

end

流程控制,及分支結構

迴圈 巢狀迴圈 外迴圈內迴圈 外迴圈執行一次,內迴圈執行一遍 while while forfor while forfor while 對於未知迴圈 傾向於用while迴圈 列印矩形 列印直角三角形 列印空心的以上圖形 列表的使用 定義 list1 特性 可以儲存任意型別多個資料 允許存在重複元素...

Python02 流程控制及資料結結構

流程控制 條件判斷 迴圈概念 列表索引 序列裡的元素都是有序號的,從0開始遞增,索引0指向第乙個元素,最後乙個元素可以用 1表示 元組同列表一樣,可以通過索引index訪問 元組操作 元組是唯讀的,所以增刪改查操作都沒有 tup tuple range 1,10,2 interable tup 1,...

Java流程控制結構

1.結構化程式設計基本原則 自頂向下 逐步求精 模組化許可權使用go to語句 2.順序結構 按照書寫順序,依此執行每一條語句 3.選擇結構 單分支結構 if 條件 說明 語句只有一條語句,那麼花括號是可以省的。if n 2 0 else if score 90 score 100 if score...