根据昨天学习的内容,自己今天早上写了一个求阶乘的module.
-module(mul).
-export([jie/1]).
jie(X) ->
Result = 1,
Result = mul(X,Result),
io:format("the result is ~w~n",[Res]).
mul(X,Result) when X>0 ->
mul(X-1,Result*X);
mul(0,Result) ->
Result.
写得可能比较粗糙,毕竟只学过一天.
补充昨天的一个概念:atoms,这个概念应该跟常量是一致的。就好象上面的一个方法mul(0,Result),其中0就是常量,全小写的字符串也是常量。
判断语句:
if
Condition 1 ->
Action 1;
Condition 2 ->
Action 2;
Condition 3 ->
Action 3;
Condition 4 ->
Action 4
end
其中Condition表示逻辑与的使用"," 表示逻辑或的使用";".
注意最后action中并没有分号结尾.
if 的用法
if
condition
action
end
case的用法
case Month of
sep -> 30;
apr -> 30;
jun -> 30;
nov -> 30;
feb when Leap == leap -> 29
end.
字符串,字符等等都有效。
一些关于lists的函数:
lists:foreach(Fun, [First|Rest]) #不产生新的list
lists:map(Fun, [First|Rest]) #产生一个新的list
lists:sort(fun({_, {c, Temp1}}, {_, {c, Temp2}}) ->
Temp1 < Temp2 end, New_list).
注意这里函数中的下划线表示一个变量,该变量在函数中不会使用,类似于占位符.
能够使用fun去声明一个函数
fx = fun(X) -> X*2 end.
fx能够作为参数传入foreach,map里面的Fun参数.
如果在modula里面,也可以用fun 方法名/参数数量来引用方法.
部分内建函数:
trunc() 砍断小数
round() 四舍五入
length()计算list长度
float()变为浮点数
is_atom()判断是否为atom数
is_tuple()判断是否为大括号的元素
最简单的并发和分布式编程例子
-module(tut17).
-export([start_ping/1, start_pong/0, ping/2, pong/0]).
ping(0, Pong_Node) ->
{pong, Pong_Node} ! finished,
io:format("ping finished~n", []);
ping(N, Pong_Node) ->
{pong, Pong_Node} ! {ping, self()},#向进程ID为pong,而且节点为Pong_Node发送消息,self()方法为返回调用方法的进程ID
receive #阻塞等待消息
pong -> #这个是消息的pattern,其实与case类似
io:format("Ping received pong~n", [])
end,
ping(N - 1, Pong_Node).
pong() ->
receive
finished ->
io:format("Pong finished~n", []);
{ping, Ping_PID} ->
io:format("Pong received ping~n", []),
Ping_PID ! pong,#向进程ID 为Ping_PID发送信息
pong()
end.
start_pong() ->
register(pong, spawn(tut17, pong, [])).#其中spawn(moduleName,methodName,parameter)是用于创建进程的,进程之间的资源是不能共享的,但是这种进程并没有操作系统进程的重量级。而register方法用于注册进程名称,因为条用spawn方法后会翻回该进程的一个ID。
start_ping(Pong_Node) ->
spawn(tut17, ping, [3, Pong_Node]).
ID ! 发送内容
这个就是线程发消息的方法.(其实进程ID信息已经包括全部,因此如果不是想发信息到使用了别名进程,只要用ID就可以了)
erl -sname 名称
就能启动不同的shell,再使用指明Pong_Node来进行分布式的调用
有了这个东西,弄一段简单的聊天工具就很容易了.
分享到:
相关推荐
【标题】"Erlang 学习笔记1" 在深入探讨Erlang这一强大的并发编程语言之前,我们先来理解一下Erlang的基本概念。Erlang是由瑞典电信设备制造商Ericsson开发的一种函数式编程语言,它最初设计的目的是为了处理分布式...
### Erlang学习笔记:深入解析Erlang编程与系统管理 #### 1. Erlang编程基础与资源 在深入探讨Erlang编程之前,我们首先需要了解一些基础资源和学习资料。Erlang官方网站([www.erlang.org](http://www.erlang.org...
### Erlang程序设计知识点概述 #### 1. Erlang基础语法与函数定义 - **模块定义**: 在Erlang中,所有的代码都包含在模块之中。例如:`-module(tut).` 定义了一个名为`tut`的模块。 - **函数定义与导出**: 函数定义...
erlang rebar 二进制
本书由Erlang之父Joe Armstrong编写,是毋庸置疑的经典著作。书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用...
【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...
Erlang以其容错性和高可用性著称,广泛应用于电信、分布式系统和实时计算领域。 压缩包中的"编程语言简谈.pptx"文件可能包含了对这些语言的深入探讨,包括它们的设计哲学、语法特性、优缺点以及在实际项目中的应用...
**Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,...
的笔记和主要引用。 检查部分以查看我从哪里获取报价。 请注意,此 repo 始终在进行中。 (我还没找到时间完成这本书。) 话题 陷阱 erlang 没有null值这样的东西 每个函数都需要返回一些东西 erlang 不允许在函数中...
5. **安装**:最后,使用`make install`将编译好的Erlang二进制文件安装到你的系统路径。在某些系统上,你可能需要管理员权限执行此操作。 Erlang的主要特性包括: - **并发性**:Erlang的进程模型是轻量级的,...
《Erlang程序设计第二版》是一本深入探讨Erlang编程语言的书籍,它旨在帮助读者掌握Erlang的核心概念和技术,以实现高并发、容错性和分布式系统的开发。课后习题是学习过程中不可或缺的一部分,它们能够检验并巩固...
### Erlang二进制共享对象的存储方式 #### 引言 随着计算机技术的发展与进步,数据处理的速度和效率成为了衡量系统性能的关键因素之一。在众多优化策略中,缓存技术因其能显著提升数据访问速度而备受关注。本文将...
Erlang是一门专为构建并发、容错的分布式系统而设计的编程语言,最早由瑞典电信设备公司爱立信所开发。其关键特性包括轻量级进程、消息传递、容错机制以及一个用于构建可靠系统的函数库和中间件,统称为Open Telecom...
1. **Erlang语法**:涵盖基本的变量、数据类型(如原子、列表、元组和二进制)、控制结构(如case表达式和if语句)以及函数定义。 2. **函数式编程概念**:Erlang是纯函数式语言,书中可能会介绍函数式编程的基本...
1. **下载**:你可以从Erlang Solutions官网或者通过提供的压缩包文件"Erlang 20.3linux░▓╫░░ⁿ"和"Erlang 20.3linux安装包"下载Erlang的Linux二进制包。 2. **解压**:解压缩下载的文件到一个合适的目录,...
erlang 程序设计(第二版) 中文 pdf
"linux版本"的提法暗示了这个压缩包还可能包含适用于Linux操作系统的Erlang二进制文件。Linux是Erlang广泛应用的平台之一,因为其开源特性和对并发处理的良好支持与Erlang的理念相契合。 在实际使用Erlang时,...
Erlang是一种高级编程语言,特别适用于并发、分布式和实时系统。它由Ericsson公司开发,主要用于构建高可用性、容错性和可扩展性的软实时系统。Erlang的25.0版本是该语言的一个更新,针对Windows操作系统进行了优化...
Erlang/OTP 26.2.1,Erlang,OTP,26.2.1
"xiandiao_erlang_Erlang课后习题_"这个压缩包文件包含了Erlang程序设计第二版的课后习题源码,这对于学习和深入理解Erlang编程至关重要。 Erlang的特点: 1. **函数式编程**:Erlang基于函数式编程范式,强调无副...