函數式語言:每一個表達式都必須有值。
一、Erlang採用不定長的整數來進行整數的算術運算,不用擔憂運算溢出。
二、全部變量都必須以大寫字母開頭。
1)單一賦值,
2)模式匹配:=表示一個模式匹配操做 Lhs = Rhs
命令f()會讓shell釋放它所綁定過的全部變量。
Erlang內存沒有可變狀態,也就沒有共享內存,更沒有鎖。
三、浮點數必須含有小數點且小數點後至少有一位十進制數。
四、原子:是一串以小寫字母開頭,後面數字字母或下劃線或郵件符號的字符。
使用單引號引發來的字符也是原子。
原子全局有效。
五、元組:(tuple)。將若干個以逗號分割的值用一對花括號括起來,就造成了一個元組。
eg:Person={person, {name, {first, joe}, {last, armstrong}}, {footsize, 42}}.
使用模式匹配提取這我的的姓。
{_, {_, {_, Who}, _}, _} = Person.
Who.
joe
------- _爲匿名變量,在同一個範圍內能夠屢次使用。
六、列表:存儲數目可變的東西。
列表的第一個元素稱爲列表的頭(head),剩下的稱爲列表的尾(tail)。
[] 爲空列表
[H|T] 使用|將列表的頭和尾分隔開來。
七、字符串:嚴格地講,Erlang中並無字符串,字符串實際上就是一個整數列表。用雙引號(")將一串字符括起來就是一上字符串。必須使用雙引號。
使用$符號來表示字符的整數值。
模塊:
-module().
-export(..).
函數:
函數簽名:函數名字和參數個數
fun : 匿名函數
函數能夠當參數,返回值也能夠是函數。
列表解析: ||
[F(X) || X <- L] 表明「由F(X)組成的列表,其中X是取值於列表L「。
eg:
-module(myMath).
-export([qsort/1]).
qsort([]) -> [];
qsort([Pivot|T]) ->
qsort([X||X <- T, X<Pivot])
++[Pivot]++
qsort([X||X<-T, X>=Pivot]).
畢達哥拉斯三元組:
整數集合{A, B, C},它使得 A平方+B平方=C平方
pythag(N) ->
[{A, B, C} ||
A <- lists:seq(1, N),
B <- lists:seq(1, N),
C <- lists:seq(1, N),
A+B+C =< N,
A*A + B*B =:= C*C
].
變位詞:
列出一個字符串全部可能的排列。
perms([]) -> [[]];
perms(L) -> [[H|T] || H<-L, T<-perms(L--[H])].
X--Y是列表的分離操做符,它從列表X中分離出元素Y。
閉包:
The notation [F(X) || X<-L] means "the list of F(X) where X is taken from the list L."
格式:
[X || Qualifier1, Qualifier2, ...]
X is an arbitrary expression, and each qualifier is either a generator or a filter;
Generators are written as Pattern <- ListExpr where ListExpr must be an expression that evaluates to a list terms.
Filter are either predicates (function that return true or false) or boolean expressions.
斷言guard:是一種用於強化模式匹配功能的結構。
max(X, Y) when X>Y -> X;
max(X, Y) -> Y.
斷言序列: 分號;表明或,逗號(,)表明與
記錄record:提供一種把一個名稱與元組中的一個元素對應起來的方法。
-record(Name, {
%% the nex two keys have default valuse.
key1 = Default1,
key2 = Default2,
...
%% The next line is equivalent to
%% key3 = undefined
key3,
...
}).
記錄只是元組的假裝。
case/if 表達式:
語法:
case Expression of
Pattern1 [when Guard1] -> Expr_seq1;
Pattern2 [when Guard2] -> Expr_seq2;
...
end
if 語法: 在if表達式的這些斷言中,至少要有一個結果爲true,不然就會拋出一個異常。
if
Guard1 ->
Expr_seq1;
Guard2 ->
Expr_seq2;
...
end
以天然順序建立列表
--------------------------------erlang中任何東西都是表達式,表達式都有值。