Erlang(3) 資料型別與變數

2021-07-26 02:37:12 字數 3433 閱讀 1771

1.初步嘗試控制台的操作。輸入

1> a = 20
結果沒反應。。。

後來發現erlang的語句是以.號來結尾的。改改:

1> a = 20.

** exception error: no match of right hand side value 20

報錯了,與右邊的值不匹配。在研究一下。

erlang變數必須以大寫字母或者下劃線開頭。

例如:

2> a = 20.

20

=是模式匹配符,變數只能一次性賦值。

這個情況下,有點像c++裡面的常量。而=就像c++裡面的==了。

22> a = 20. %首次匹配,將a繫結為20

2023> a = 20. %再次將a匹配20,是相等的,輸出了表示式的值20.

2024> x = 1234. %首次匹配,將b繫結為1234.

1234

25> x = 1235. %再次匹配,匹配不上,就報錯了。

** exception error: no match of right hand side value 1235

2.注釋,%末尾後面的都是注釋

3.幾個shell編輯命令

ctrl + a 將游標移動到行首

ctrl + d 刪除游標當前字元,在行尾等待輸入的時候,是無法刪除字元的

ctrl + e 將游標移動到行尾

ctrl + f或右箭頭 將游標向前乙個字元

ctrl + b或左箭頭 將游標向後乙個字元

ctrl + p或上箭頭 切換到上一條shell語句

ctrl + n或下箭頭 切換到下一條shell語句

ctrl + t 調換游標附近的兩個字元

tab 嘗試擴充套件當前模組或函式名稱。

這些都是親自測試過的了。

4.算數表示式

8> 1 + 2 * 3 + 4.

11

遵循算數表示式的一般規則。

10> 123456789 * 123456789 * 999999999.

15241578734948942249809479

erlang可以使用任意長度的整數,不用擔心溢位。

5.8進製和16進製制

18> 8#1234567.

342391

19> 16#123abc.

1194684

在使用數字的時候,在前面加上8#和16#

試了一下11#、123#這些也是行的。看來理論上是支援任意進製的運算。

6.浮點數

兩個整數相除,得出的是浮點數。

34> 4/2.

2.0

要想得到c++裡面的整除和求餘的效果。

31> 5 div 3.

132> 5 rem 3.

2

div是整除,rem是求餘。

%已經被用來做注釋了。

erlang的浮點數,也會存在精度問題。

7.原子

有點像c++的字串常量。

原子必須以小寫字母開頭,或者用單引號包著。

原子的值就是它本身

35> hello world.

* 1: syntax error before: world

35> hello.

hello

36> 'hello world'.

'hello world'

不用''包著的情況下,是不能用空格的。

8.元組

把一些數量固定的專案組合成單一的實體,叫做元組(tuple)。

例如:有點想c++的結構。但是元組是匿名的。所以我覺得,更加像c++11出現的初始化列表。

為了增加可讀性,一般將乙個具有注釋性意義的原子作為元組的第乙個元素。

例如點改為

元組是可以巢狀的。

9.提取元組的值

這裡需要用到=,真正意義上的模式匹配

例如:

1> point = .

2> = point.

3> x.

104> y.

45

注意的是,如果x和y上面之前已經用過了,就會匹配不上的。

只有首次匹配,才能抽取元組中的值。

可以使用_來作為佔位符,表示不感興趣的變數,成為匿名變數,同乙個模式裡面可以有多個。

例如上面只抽取x: = point.

10.列表(list)用來存放任意數量的事物,使用。

列表的第乙個元素為表頭(head),剩下的成為表尾(tail)。

如果t是乙個列表,[h|t]也是乙個列表,它的頭是h,尾是t。豎線(|)把列表的頭與尾分開。是乙個空列表。

如果有乙個非空列表l,通過[x|y] = l會提取列表頭作為x,列表尾作為y。

11.字串

嚴格來說erlang裡沒有字串。字串實際是是乙個整數列表。每個字元對於列表裡乙個unicode**點(codepoint)。

可以使用字串字面量來建立乙個列表。字串字面量(string literal)用雙引號包著。

5> h = "hello world, fable.".

"hello world, fable."

如果列印列表的時候,列表內所有整數都代表可列印字元,就會自動列印成字串字面量。

6> [83,117,114,112,114,105,115,101].

"surprise"

7> [1,83,117,114,112,114,105,115,101].

[1,83,117,114,112,114,105,115,101]

1不是可列印字元,加上之後就不能自動轉換了。

使用$可以列印出某個字元的整數。

9> $1.

4910> $a.

97

12.f()命令可以讓當前的所有繫結都解除。

總結一下:

資料型別

erlang

c++整形

無限制有最大值限制

浮點型有精度限制

有精度限制

字串使用數字來表示

使用字元陣列

復合型別

元組,列表

結構和類,陣列

因為對erlang的認識還不夠深入,所以只能勉強比較。

其實學一門新的語言的時候,不應該無時無刻想著對之前掌握的語言進行對比,想著**好用,**不好用。

只是這些對照,可以對原來的語言,計算機的基礎,以及編譯器有更多的認識。

這些都要靠自己去把握了。

變數與資料型別

u 標量型 l 數字型,字元型,布林型,日期型 u 組合型 l record,table,varray u 參考型 l ref cursor,ref object type u lob large object lbfile bfile資料儲存在乙個不被oralce維護的單獨檔案中,該資料庫儲存乙個...

變數與資料型別

1.變數 定義 可以改變的量稱為變數,實際代表記憶體的一塊空間 命名規則 1 包含數字字母下劃線,且首字元不能位數字 2 嚴格區分大小寫,且不能使用關鍵字 可使用import keyword print keyword.kwlist 查詢 3 命名變數有意義,且不能使用中文命名 變數的交換方法 py...

erlang的強資料型別

在mailist中,一位朋友表示疑問,為什麼下面的語句提示出錯?erlang的執行時資料繫結有什麼特殊規則?file open test.file write,raw,提示badarg,引數錯誤。其實不是執行時繫結有什麼問題,而是math pow 2返回的資料型別為float,而file open ...