﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-yeshucheng-随笔分类-erlang学习</title><link>http://www.blogjava.net/yeshucheng/category/36429.html</link><description>追逐自己，追逐方向，心随悟所动</description><language>zh-cn</language><lastBuildDate>Tue, 09 Dec 2008 08:05:38 GMT</lastBuildDate><pubDate>Tue, 09 Dec 2008 08:05:38 GMT</pubDate><ttl>60</ttl><item><title>Erlang学习笔记（一）</title><link>http://www.blogjava.net/yeshucheng/archive/2008/12/09/245167.html</link><dc:creator>叶澍成</dc:creator><author>叶澍成</author><pubDate>Tue, 09 Dec 2008 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/yeshucheng/archive/2008/12/09/245167.html</guid><wfw:comment>http://www.blogjava.net/yeshucheng/comments/245167.html</wfw:comment><comments>http://www.blogjava.net/yeshucheng/archive/2008/12/09/245167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeshucheng/comments/commentRss/245167.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeshucheng/services/trackbacks/245167.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">云计算应该所具备的特质如下：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">高负载</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">正常运转</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">容错性</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">4.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">分布式</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">5.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">容易伸缩</span></p>
<p>Erlang<span style="font-family: 宋体">（读音：</span>['ə:l&#230;ŋ]<span style="font-family: 宋体">厄兰，中文意思为：占线小时（话务负载单位））正是由于它属于开放的电信业务平台，也就不难理解它的意义了。几乎完全具备以上特质，而且它也是典型的函数式语言。和我们</span>OOP<span style="font-family: 宋体">的思想有着截然不同的概念。在以下的学习过程中主要还是以《</span>Erlang<span style="font-family: 宋体">程序设计》这本书作为一个学习的依据。</span></p>
<p><strong><span style="font-size: 12pt; font-family: 宋体">原子</span></strong></p>
<p><span style="font-family: 宋体">定义：在</span>Erlang<span style="font-family: 宋体">中原子用来表示不同的<span style="color: red">非数字常量值。</span>这里说白了其实就是一种常量的定义。</span>Erlang<span style="font-family: 宋体">中原子是全局有效的，不需要像以前</span>c/c++<span style="font-family: 宋体">那样通过宏来定义或者包含文件。在定义原子的时候只需要注意以下一些特点就可以：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">一般情况原子是以一串以小写字母开头，后面有数字、字母、下划线、邮件符号（</span>@<span style="font-family: 宋体">）；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">使用单引号引用起来的字符也属于原子，例如</span>&#8217;Monday&#8217;<span style="font-family: 宋体">；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">一个原子的值就是原子本身；</span></p>
<p><strong><span style="font-size: 12pt; font-family: 宋体">元组（</span></strong><strong><span style="font-size: 12pt">tuple</span></strong><strong><span style="font-size: 12pt; font-family: 宋体">）</span></strong></p>
<p><span style="font-family: 宋体">定义：首先它是</span>Erlang<span style="font-family: 宋体">中具有特质的一个定义，如果说把它和我们</span>java<span style="font-family: 宋体">中的一个</span>JavaBean<span style="font-family: 宋体">来类比可能稍显类似，书上引用的是</span>c<span style="font-family: 宋体">语言数据结构来解说元组的结构，尽管非强浅显能看懂。但是作为一个</span>java<span style="font-family: 宋体">程序员我觉得采用自己熟悉的语言结构来对比，学习效果更佳吧（对于记忆有很大帮助）。</span></p>
<p><span style="font-family: 宋体">比如我们一般对于</span>JavaBean<span style="font-family: 宋体">的定义是如下结构：</span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">public class Person {</span></strong></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; private String name;</span></strong></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; private int height;</span></strong></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; private int footSize;</span></strong></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; private String eyeColor;</span></strong></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">&nbsp;&nbsp;&nbsp; //&nbsp;get/set...</span></strong></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">}</span></strong></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">那在我们引用定义的时候就可以直接：</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">Person person1=</span><strong><span style="font-size: 10pt; color: #7f0055; font-family: 'Courier New'">new</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New'"> Person();</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">person1.setName(</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"yeshucheng"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">person1.setHeight(111);</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">person1.setFootSize(40);</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New'">person1.setEyeColor(</span><span style="font-size: 10pt; color: #2a00ff; font-family: 'Courier New'">"black"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New'">);</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">......</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">与之相对应的是我们使用</span><span style="font-size: 10pt; font-family: 'Courier New'">Erlang</span><span style="font-size: 10pt; font-family: 宋体">来定义了，对于</span><span style="font-size: 10pt; font-family: 'Courier New'">Erlang</span><span style="font-size: 10pt; font-family: 宋体">的定义就截然和</span><span style="font-size: 10pt; font-family: 'Courier New'">c/c++</span><span style="font-size: 10pt; font-family: 宋体">或者</span><span style="font-size: 10pt; font-family: 'Courier New'">java</span><span style="font-size: 10pt; font-family: 宋体">有着明显不同，相对于更加精炼明了：（这里我直接使用书上说的所谓二元组）</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">Person={person,{name,yeshucheng},{height,111},{footsize,40},{eyecolor,black}}.</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">没错，就是这么直截了当的来定义，甚至赋值（严格说</span><span style="font-size: 10pt; font-family: 'Courier New'">Erlang</span><span style="font-size: 10pt; font-family: 宋体">不能这么说，但是为了好记忆可以这么理解）</span></p>
<p style="text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">对于以上的定义这里要说明注意的地方：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; text-align: left; tab-stops: list 21.0pt" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">定义元组，元组中字段没有名字，通常可以使用一个原子作为元组的第一元素来标明（<strong><span style="color: red">请注意这里花括号内第一原子都是解释逗号后面一个说明</span></strong>），这个元组所能代表的含义就是上面列出的程序定义了。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; text-align: left; tab-stops: list 21.0pt" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">创建元组，在声明元组的同时其实已经创建了元组，这个也是</span><span style="font-size: 10pt; font-family: 'Courier New'">Erlang</span><span style="font-size: 10pt; font-family: 宋体">的一大特点之一了。如果不再使用，也随之销毁。</span><span style="font-size: 10pt; font-family: 'Courier New'">Erlang</span><span style="font-size: 10pt; font-family: 宋体">使用的垃圾搜集器去收回没有使用的内存。</span></p>
<p style="margin-left: 21pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">如：</span><span style="font-size: 10pt; font-family: 'Courier New'">F={firstName,wan}</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">L={lastName,andy}</span></p>
<p style="margin-left: 42pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">P={person,F,L}//</span><span style="font-size: 10pt; font-family: 宋体">这里就应对我们第一条说明的一样第一个名称表示就是后面所有逗号的整体列举，如果在</span><span style="font-size: 10pt; font-family: 'Courier New'">Erlang</span><span style="font-size: 10pt; font-family: 宋体">环境中对于上面写完后，直接敲回车（语句结束后存在</span><span style="font-size: 10pt; font-family: 'Courier New'">&#8221;.&#8221;</span><span style="font-size: 10pt; font-family: 宋体">这里稍微注意下）就会得到以下结果，正好印证我们所说明这这个问题了</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">==</span><span style="font-size: 10pt; font-family: 宋体">》</span><span style="font-size: 10pt; font-family: 'Courier New'">{persong,{firstName,wan},{lastName,andy}}.</span></p>
<p style="margin-left: 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">如果在创建过程中存在一个未定义的变量，则程序编译就会产生错误。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; text-align: left; tab-stops: list 21.0pt" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 宋体">提取元组的字段值，刚才我们在程序中有定义一个</span><span style="font-size: 10pt; font-family: 'Courier New'">Person</span><span style="font-size: 10pt; font-family: 宋体">的元组而且也设置值了，现在如果我们想得到或者说提取我们的值，那需要如何而做呢？首先我们采用基本的元组方式来试着看看如下：</span></p>
<div style="border-right: windowtext 1pt solid; padding-right: 4pt; border-top: windowtext 1pt solid; padding-left: 4pt; background: #7f7f7f; padding-bottom: 1pt; margin-left: 21pt; border-left: windowtext 1pt solid; margin-right: 0cm; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #7f7f7f; padding-bottom: 0cm; margin-left: 18pt; border-left: medium none; text-indent: -18pt; padding-top: 0cm; border-bottom: medium none; text-align: left; tab-stops: list 39.0pt" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">1&gt;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 'Courier New'">Point={point,10,45}.</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #7f7f7f; padding-bottom: 0cm; margin-left: 18pt; border-left: medium none; text-indent: -18pt; padding-top: 0cm; border-bottom: medium none; text-align: left; tab-stops: list 39.0pt" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">2&gt;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 'Courier New'">{point,X,Y}=Point.</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #7f7f7f; padding-bottom: 0cm; margin-left: 18pt; border-left: medium none; text-indent: -18pt; padding-top: 0cm; border-bottom: medium none; text-align: left; tab-stops: list 39.0pt" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">3&gt;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 'Courier New'">X.</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #7f7f7f; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none; text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">10</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #7f7f7f; padding-bottom: 0cm; margin-left: 18pt; border-left: medium none; text-indent: -18pt; padding-top: 0cm; border-bottom: medium none; text-align: left; tab-stops: list 39.0pt" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">4&gt;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt; font-family: 'Courier New'">Y.</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #7f7f7f; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none; text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">45</span></p>
</div>
<p style="margin-left: 21pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">注明：这里又再次强调下</span><span style="font-size: 10pt; font-family: 'Courier New'">point</span><span style="font-size: 10pt; font-family: 宋体">逗号后面的都是为他而说明的。</span></p>
<div style="border-right: windowtext 1pt solid; padding-right: 4pt; border-top: windowtext 1pt solid; padding-left: 4pt; background: #7f7f7f; padding-bottom: 1pt; margin-left: 21pt; border-left: windowtext 1pt solid; margin-right: 0cm; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #7f7f7f; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none; text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">1&gt;Person={person,{name,yeshucheng},{height,111},{footsize,40},{eyecolor,black}}.</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #7f7f7f; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none; text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">2&gt;{_,{_,Who},{_,_},{_,_},{_,_}}=Person.</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #7f7f7f; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none; text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">3&gt;Who.</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #7f7f7f; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none; text-align: left" align="left"><span style="font-size: 10pt; font-family: 'Courier New'">yeshucheng</span></p>
</div>
<p style="margin-left: 15.75pt; text-align: left" align="left"><span style="font-size: 10pt; font-family: 宋体">说明下，如果上面想得到的是值，那么位置响应对号入座然后</span><span style="font-size: 10pt; font-family: 'Courier New'">Who</span><span style="font-size: 10pt; font-family: 宋体">换成</span><span style="font-size: 10pt; font-family: 'Courier New'">What</span><span style="font-size: 10pt; font-family: 宋体">就成（我开始也犯错误，编译立马出错，后来想想用过一个</span><span style="font-size: 10pt; font-family: 'Courier New'">What</span><span style="font-size: 10pt; font-family: 宋体">试试，果然正确，呵呵）。</span></p>
<p style="text-align: left" align="left"><strong><span style="font-size: 12pt; font-family: 宋体">列表</span></strong></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体">定义：列表第一个元素称为列表的头（</span><span style="font-family: 'Courier New'">head</span><span style="font-family: 宋体">）</span><span style="font-family: 'Courier New'">,</span><span style="font-family: 宋体">后部分称为列表尾（</span><span style="font-family: 'Courier New'">tail</span><span style="font-family: 宋体">），一般</span><span style="font-family: 'Courier New'">[H|T]</span><span style="font-family: 宋体">来标示列表了。</span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体">注：列表的头可以是任何东西，但是列表的尾通常还是一个列表。</span></p>
<p style="text-align: left" align="left"><span style="font-family: 宋体">至于具体的细节问题还是需要找找相关文档看下为好，它的概念牵涉到后面的非常多的定义了。</span></p>
<img src ="http://www.blogjava.net/yeshucheng/aggbug/245167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeshucheng/" target="_blank">叶澍成</a> 2008-12-09 10:20 <a href="http://www.blogjava.net/yeshucheng/archive/2008/12/09/245167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>