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 ...