Archive for erlang

名字服务 功能:向服务器提交一个名字,然后服务器返回一个与这个名字关联的值。 <pre lang="erlang">-module(kvs). -export([start/0,store/2,lookup/1]). start() -&gt; register(kvs,spawn(fun() -&gt; loop() end)). store(Key,Value) -&gt; rpc({store,Key,Value}). lookup(Key) -&gt; rpc({lookup,Key}). rpc(Q) -&gt; kvs ! {self(),Q}, receive {kvs,Reply} -&gt; Reply end. loop() -&gt; receive {From,{store,Key,Value}} -&gt; put(Key,{ok,Value}), From ! {kvs,true},

Continue

1.带超时的receive。 防止消息不来,receive语句陷入无限等待中。 &nbsp; 只有超时的receive 功能:让当前进程暂停Tms。 <pre lang="erlang"> sleep(T) -> receive after T -> true end. </pre> 超时时间为0的receive 超时时间为0的语句会立即触发一个超时,但在此之前,会尝试对邮箱进行模式匹配。 <pre lang="erlang"> flush_buffer() -> receive _Any -> flush_buffer() after 0 -> true end. </pre> 程序分析: 触发超时之前,会先进行模式匹配,_Any匹配到,又会调用flush_buffer(),一直到清空进程邮箱中的所有消息。 没有超时子句,在邮箱为空情况下,flush_buffer()会永久暂停,不会返回。 <pre lang="er

Continue

erlang被称作纯粹的消息传递语言。在erlang中,和进程打交道只需要3个原语:spawn、 send和receive。 <strong>1.关于erlang并发编程的一个例子。</strong> 先上代码: [caption id="attachment_618" align="alignnone" width="300" caption="erlang并发编程"]<a href="http://0x55aa-wordpress.stor.sinaapp.com/uploads/2012/07/erlang.png"><img class="size-medium wp-image-618" title="erlang并发编程" src="http://0x55aa-wordpress.stor.sinaapp.com/uploads/2012/07/erlang-300x213.png" alt="erlang并发编程" width="300" height="213" /></a>[/caption] 20&gt; c(area_server1.erl

Continue

<strong>1.BIF:</strong> BIF:(built-in function)内建函数,是erlang语言的组成部分。是erlang虚拟机中的基本操作。 tuple_to_list/1将元组转换为列表,time/0返回当前时间的时,分,秒。 1&gt; tuple_to_list({12,cat,"ddd"}). [12,cat,"ddd"] 3&gt; time(). {12,35,57} <strong>2.二进制数据:</strong> 一种数据类型,用来实现原始数据的高速存储。节省内存,输入输出更加高效。书写打印时,二进制数据以一个整数或者字符序列的形式出现,两端分别用尖括号括起来。其中的整数,每一个都要在0-255之间,如果二进制数据是可以打印的字符串,shell将显示字符串形式,否则会显示一串整数。 @spec 描述函数的参数和返回类型。类型标注,不是erlang代码而是注释文档的一部分,shell中不能使用这些标注。erlang中的模块声明也是注释的一部分。 erlang通过BIF来构造二进制数据或者从中提取数据,或者通过比

Continue

&nbsp; 1.列表解析。 1&gt; L=[1,2,3,4] . [1,2,3,4] 4&gt; lists:map(fun(X) -&gt; 2*X end,L). [2,4,6,8] 5&gt; [2*X || X &lt;- L]. [2,4,6,8] [F(X) || X &lt;- L] 代表由F(X)组成的列表,X取值于列表L。||右边用于匹配列表L中元素的模式,左边是一个构造器。 右边模式匹配可以像过滤器一样操作,注意大小写的区别。 6&gt; [X || {a,X} &lt;- [{a,1},{b,2},{c,3},{a,4},hello,"wow"]]. [1,4] 7&gt; [X || {A,X} &lt;- [{a,1},{b,2},{c,3},{a,4},hello,"wow"]]. [1,2,3,4] 2.列表解析快速排序算法。 &nbsp; <pre>-module(lib_misc). -export([qsort/1]). qsort([]) -&gt; []; qsort(

Continue

妙不可言的函数编程。为什么这么说呢,当我看完第三章时,被erlang的编程方式深深的吸引住了,但是作者总是在我觉得很精妙的地方说:“该方法在实际编程中很少用到”T_T。python也有函数编程的思想,不过一直没有用到过,可能还停留在初级阶段。下面的笔记也只是自己学习中的所悟,可能有着大量的错误,如果你发现我理解的不对,感谢留言指正。请带着怀疑的态度看此笔记。 1、模块。 模块文件存放在扩展名为.erl的文件中,编译完成后的扩展名为.beam。 文件名geometry.erl(博客不支持erlang语法高亮,蛋疼了。。) -module(geometry). -export([area/1]). area({rectangle,Width,Ht}) -&gt; Width * Ht; area({circle,R}) -&gt; 3.14 * R * R 执行过程:先需要将erlang shell目录移动到代码目录下,查看当前目录命令pwd(),cd(Dir)。 2&gt; c(geometry). {ok,geometry} 6&g

Continue

The Erlang plugin for Vim,地址:https://github.com/onlychoice/vimerl/ windows下将文件复制到“安装目录/Vim/vimfiles”里面就行了。 安装完直接带有自动补全功能, Ctrl+c,Ctrl+o,应该是正确的。 这里找到一个管理vim插件的工具:<strong>pathogen</strong>。 地址:http://www.vim.org/scripts/script.php?script_id=2332 这个工具可以很方便的管理插件的安装和卸载,windows下在\vimfiles里建立一个 bundle 目录, 以后插件可以以整个文件夹的形式存放在里面。 方便安装删除。 下载的pathogen.vim文件放到Vim\vimfiles\autoload里,linux下安装到/.<strong>vim/。 </strong> 配置pathogen: 修改~/.vimrc配置文件,加入: List代码 call pathogen#infect() syntax

Continue

  在shell下学习erlang的语法 1.输入十六进制: 1&gt; 16#f. 15 输入命令需要在末尾加上一个点号,否则会认为没有输入完整。(第一次安装完成,就迫不及待的在命令行下试了,没有成功,慌了。仔细阅读文档才发现输入不完整。) 2.erlang变量名大写: 13&gt; i=9. ** exception error: no match of right hand side value 9 14&gt; I=9. 9 3.erlang变量的单一赋值: 当执行I=9时,值9就被绑定到I上。没绑定之前是一个自由变量,绑定后变量的值将不会再发生改变。 “=”模式匹配操作符。 17&gt; I=5. ** exception error: no match of right hand side value 5 “Erlang 是一个函数式语言,不存在可变状态。 当多核编程来临的时候,采用不可 变状态所带来的好处是难以估量的。 如果你用 C、Java 这样的传统编程语言为多核 CPU 编写程序,就不得不应付共享内存带来的问题。要想

Continue

Erlang程序设计。pdf 这几天突然又迷茫了,再看c和c++的一些注意、要点。看了本《python网络编程》,与自己想学的东西差太多,看到后面就开始蹦跶着看了。 在网上看了一篇文章,决定小小的研究一下erlang,说不定以后用得着。 找了几篇文章 http://zhys9.com/blog/?tag=erlang http://jbpm.group.iteye.com/group/topic/7938 几本erlang相关的pdf书,从sina的共享文档找的,论坛不上,qq群加了。 开始搞erlang

Continue