erlang學習筆記1

函數式語言:每一個表達式都必須有值。
 
一、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中任何東西都是表達式,表達式都有值。
相關文章
相關標籤/搜索