概要:Erlang的特点,现在发现Erlang几乎都是与从不同。。。
变量不可变:
保证原子性,为并行化做准备。
元组:
类似c语言中的结构。
Person = {person, {name,joe}, {height,1.82}. }.
列表:
[H|T],这个列表以H为头,以T为尾。竖线符号(|)可以将列表的头和尾分隔开来,而[]则是空列表。
ThingsToBuy = [{apples,10},{pears,6},{milk,3}].
模式匹配:
=表示一个模式匹配操作。Lhs=Rhs实际上是这样一个过程,对右端求值(Rhs),然后将结果与左端(Lhs)进行模式匹配。
38p。递归:
一般写法:
total([Head|Tail]) -> some_function_of(Head) + total(Tail); total([]) -> 0.例子:
-module(mylists). -export([sum/1]). sum([H|T]) -> H + sum(T); sum([]) -> 0.过程:
sum([ 1, 3 ,10]) = 1 + sum( 3, 10)
= 1 + 3 + sum([10])
= 1 + 3 + 10 + sum([])
= 1 + 3 + 10 + 0
= 14
列表解析:
(Erlang-my@thomescai-G41MT-S2)4> L = [1,2,3,4]. [1,2,3,4] (Erlang-my@thomescai-G41MT-S2)5> [2*X || X <- L]. [2,4,6,8][F(X) || X <- L] 代表”由F(X)组成的列表,其中X是取值于列表L“。因此,[2*X || X <- L] 意味着”列表L中每个元素X乘以2后的列表“。
算术表达式:
p57。
断言样例:
断言序列可以是单个断言也可以是一系列用分号(;)分开的断言集合。在断言集合G1;G2;。。。;Gn中,只要任何一个断言为true,那么整个断言序列就为true。
f(X,Y)when is_integer(X), X > Y, Y < 6 -> ...
记录:
记录就是元组。
Eshell V5.8.3 (abort with ^G) 1> rr("records.hrl"). [todo] 2> X=#todo{}. #todo{status = reminder,who = joe,text = undefined} 3> X1 = # todo{status=urgent,text="Fix errata in book"}. #todo{status = urgent,who = joe,text = "Fix errata in book"} 4> X2 = X1#todo{status=done}. #todo{status = done,who = joe,text = "Fix errata in book"}