`
okafor2010
  • 浏览: 5157 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
最近访客 更多访客>>
社区版块
存档分类
最新评论

Erlang自学笔记(二)

阅读更多
   根据昨天学习的内容,自己今天早上写了一个求阶乘的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 学习笔记1" 在深入探讨Erlang这一强大的并发编程语言之前,我们先来理解一下Erlang的基本概念。Erlang是由瑞典电信设备制造商Ericsson开发的一种函数式编程语言,它最初设计的目的是为了处理分布式...

    erlang学习笔记

    ### Erlang学习笔记:深入解析Erlang编程与系统管理 #### 1. Erlang编程基础与资源 在深入探讨Erlang编程之前,我们首先需要了解一些基础资源和学习资料。Erlang官方网站([www.erlang.org](http://www.erlang.org...

    erlang 笔记

    ### Erlang程序设计知识点概述 #### 1. Erlang基础语法与函数定义 - **模块定义**: 在Erlang中,所有的代码都包含在模块之中。例如:`-module(tut).` 定义了一个名为`tut`的模块。 - **函数定义与导出**: 函数定义...

    erlang rebar 二进制

    erlang rebar 二进制

    Erlang程序设计(第二版)及源码

    本书由Erlang之父Joe Armstrong编写,是毋庸置疑的经典著作。书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用...

    Erlang程序设计(第2版)1

    【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    Erlang以其容错性和高可用性著称,广泛应用于电信、分布式系统和实时计算领域。 压缩包中的"编程语言简谈.pptx"文件可能包含了对这些语言的深入探讨,包括它们的设计哲学、语法特性、优缺点以及在实际项目中的应用...

    erlang编程 Introducing Erlang

    **Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,...

    java版商城源码-hello-erlang:Erlang的笔记和例子

    的笔记和主要引用。 检查部分以查看我从哪里获取报价。 请注意,此 repo 始终在进行中。 (我还没找到时间完成这本书。) 话题 陷阱 erlang 没有null值这样的东西 每个函数都需要返回一些东西 erlang 不允许在函数中...

    erlang_版本24.3.4.4

    5. **安装**:最后,使用`make install`将编译好的Erlang二进制文件安装到你的系统路径。在某些系统上,你可能需要管理员权限执行此操作。 Erlang的主要特性包括: - **并发性**:Erlang的进程模型是轻量级的,...

    erlang程序设计第二版课后习题答案(精简版).zip

    《Erlang程序设计第二版》是一本深入探讨Erlang编程语言的书籍,它旨在帮助读者掌握Erlang的核心概念和技术,以实现高并发、容错性和分布式系统的开发。课后习题是学习过程中不可或缺的一部分,它们能够检验并巩固...

    erlang二进制共享对象的存储方式

    ### Erlang二进制共享对象的存储方式 #### 引言 随着计算机技术的发展与进步,数据处理的速度和效率成为了衡量系统性能的关键因素之一。在众多优化策略中,缓存技术因其能显著提升数据访问速度而备受关注。本文将...

    erlang趣学指南

    Erlang是一门专为构建并发、容错的分布式系统而设计的编程语言,最早由瑞典电信设备公司爱立信所开发。其关键特性包括轻量级进程、消息传递、容错机制以及一个用于构建可靠系统的函数库和中间件,统称为Open Telecom...

    erlang资源

    1. **Erlang语法**:涵盖基本的变量、数据类型(如原子、列表、元组和二进制)、控制结构(如case表达式和if语句)以及函数定义。 2. **函数式编程概念**:Erlang是纯函数式语言,书中可能会介绍函数式编程的基本...

    Erlang 20.3linux安装包

    1. **下载**:你可以从Erlang Solutions官网或者通过提供的压缩包文件"Erlang 20.3linux░▓╫░░ⁿ"和"Erlang 20.3linux安装包"下载Erlang的Linux二进制包。 2. **解压**:解压缩下载的文件到一个合适的目录,...

    erlang程序设计(第二版)中文pdf

    erlang 程序设计(第二版) 中文 pdf

    Erlang23_3.zip

    "linux版本"的提法暗示了这个压缩包还可能包含适用于Linux操作系统的Erlang二进制文件。Linux是Erlang广泛应用的平台之一,因为其开源特性和对并发处理的良好支持与Erlang的理念相契合。 在实际使用Erlang时,...

    erlang25.0 windows版本

    Erlang是一种高级编程语言,特别适用于并发、分布式和实时系统。它由Ericsson公司开发,主要用于构建高可用性、容错性和可扩展性的软实时系统。Erlang的25.0版本是该语言的一个更新,针对Windows操作系统进行了优化...

    Erlang/OTP 26.2.1

    Erlang/OTP 26.2.1,Erlang,OTP,26.2.1

    xiandiao_erlang_Erlang课后习题_

    "xiandiao_erlang_Erlang课后习题_"这个压缩包文件包含了Erlang程序设计第二版的课后习题源码,这对于学习和深入理解Erlang编程至关重要。 Erlang的特点: 1. **函数式编程**:Erlang基于函数式编程范式,强调无副...

Global site tag (gtag.js) - Google Analytics