Erlang自学笔记(一)
本来想着能够外包到汇丰里面工作的,谁知道,进入了汇丰的黑名单。因此每天在办公室坐等领工资。闲来没事,下载了一个Erlang学习,直到有人叫我去做项目。今天看了一整天的geting-start,也就写些内容在这里,做一下笔记。
我是用写字本慢慢按描述打的。然后使用Erlang的shell中使用c(moduleName)来进行编译的。
程序注释使用 %
变量大头字母必须要大写否则会出错。
语句结束是使用. 不是使用;
在Erlang中 {Element,Element}这种情况是算一个元素。
能够对于大括号的元素进行匹配的赋值.例如
{Head|Rest} = {1,2,3,4,5,6}
Head.
1
Rest.
{2,3,4,5,6}
R = {5}.
M = {Head|R}.
M.
{1,5}
下面是一个例子,显示数据,加上求最大值的。
-module(tut7). #这里是命名模块名称,文件名必须与这个名称相同
-export([format_temps/1]). #这个是对外声明可以使用的方法,方法名为#format_temps 参数个数为1
format_temps(List_of_cities) -> #这个是方法的定义,在使用->之前,可以使用#when对参数进行判断.
Converted_List = convert_list_to_c(List_of_cities),
print_temp(Converted_List),
{Max_city,Min_city} = find_max_and_min(Converted_List),
print_max_and_min(Max_city,Min_city).
convert_list_to_c([{Name,{f,F}}|Rest]) ->
Converted_City = {Name,{c,(F-32)*5/9}},
[Converted_City | convert_list_to_c(Rest)];
convert_list_to_c([City|Rest]) ->
[City|convert_list_to_c(Rest)];
convert_list_to_c([]) -> [].
print_temp([{Name,{c,Temp}}|Rest]) ->
io:format("~-15w ~w c~n",[Name,Temp]),#使用了提供的module,io进#行了格式化的输出,其中 ~w对应后面的List中的元素,~n为换行
print_temp(Rest);
print_temp([]) ->
ok.
find_max_and_min([City|Rest]) ->
find_max_and_min(Rest,City,City).
find_max_and_min([{Name,{c,Temp}}|Rest],
{Max_Name,{c,Max_Temp}},
{Min_Name,{c,Min_Temp}})->
if
Temp>Max_Temp->
Max_City = {Name,{c,Temp}};
true ->
Max_City = {Max_Name,{c,Max_Temp}}
end,
if
Temp <Min_Temp ->
Min_City = {Name,{c,Temp}};
true ->
Min_City = {Min_Name,{c,Min_Temp}}
end,
find_max_and_min(Rest,Max_City,Min_City);
find_max_and_min([],Max_City,Min_City) ->
{Max_City,Min_City}.
print_max_and_min({Max_name,{c,Max_temp}},{Min_name,{c,Min_temp}}) ->
io:format("Max temperature was ~w c in ~w~n",[Max_temp,Max_name]),
io:format("Min temperature was ~w c in ~w~n",[Min_temp,Min_name]).
对于Erlang的阅读,我觉得会比较伤眼睛,而且逻辑思维敢比较强,感觉上方法总是递归调用。而且例子中的函数,总是会对空集给予考虑。
明天继续。