钱包鼓鼓 發表於 2015-1-4 11:47:01

Erlang中的匹配模式总结

<p><strong>一、赋值时匹配</strong></p>
<p><strong>原子匹配<br />
</strong><div class="codetitle"><span><a data="83564" class="copybut" id="copybut83564"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code83564"><br />
atom&nbsp;&nbsp;&nbsp; = atom&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % atom<br />
another = another&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % another<br />
atom&nbsp;&nbsp;&nbsp; = another&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % exception error<br />
</div><br />
<strong>变量匹配<br />
</strong><div class="codetitle"><span><a data="75278" class="copybut" id="copybut75278"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code75278"><br />
Var = 2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % 2<br />
Var = 3 - 1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % 2<br />
Var = 1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % exception error<br />
</div><br />
<strong>元组匹配<br />
</strong><div class="codetitle"><span><a data="53252" class="copybut" id="copybut53252"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code53252"><br />
Attr = {name, sloger}.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % {name, sloger}<br />
{name, Name} = Attr.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % {name, sloger}<br />
Name.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % sloger<br />
</div><br />
<strong>列表匹配<br />
</strong><div class="codetitle"><span><a data="92773" class="copybut" id="copybut92773"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code92773"><br />
Langs = .<br />
= Langs.<br />
Head.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % perl<br />
Tail.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % <br />
</div><br />
<strong>参数匹配<br />
</strong><div class="codetitle"><span><a data="74210" class="copybut" id="copybut74210"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code74210"><br />
sum([]) -&gt; 0;<br />
sum() -&gt; H + sum(T).</p>
<p>sum().&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % 6<br />
</div><br />
<strong>记录匹配<br />
</strong><div class="codetitle"><span><a data="56456" class="copybut" id="copybut56456"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code56456"><br />
%% record(post, {title, slug, body, author}).</p>
<p>Post = #post{title = "Pattern Match in Erlang",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; slug = "pattern-match-in-erlang",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; body = "Bla bla bla...",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; author = sloger}.</p>
<p>#post{title = Title, slug = Slug} = Post.</p>
<p>Title.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % "Erlang 中的模式匹配总结"<br />
Slug.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % "summary-of-pattern-match-in-erlang"<br />
</div><br />
<strong>比特匹配<br />
</strong><div class="codetitle"><span><a data="83159" class="copybut" id="copybut83159"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code83159"><br />
Red = 5.<br />
Green = 23.<br />
Blue = 200.</p>
<p>Color = &lt;&lt;Red:5, Green:6, Blue:5&gt;&gt;.</p>
<p>&lt;&lt;R1:5, G1:6, B1:5&gt;&gt; = Color.</p>
<p>R1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % 5<br />
G1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % 23<br />
B1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % 200<br />
</div><br />
<strong>二、流程控制中的匹配</strong></p>
<p><strong>if<br />
</strong><div class="codetitle"><span><a data="3049" class="copybut" id="copybut3049"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code3049"><br />
</p>
<p>if<br />
&nbsp;&nbsp;&nbsp; Pattern1 -&gt; Expression1;<br />
&nbsp;&nbsp;&nbsp; Pattern2 -&gt; Expression2;<br />
&nbsp;&nbsp;&nbsp; %% and so on ...<br />
&nbsp;&nbsp;&nbsp; _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; Expression3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % 匹配所有其它结果<br />
end.</p>
<p></div><br />
<strong>case</strong></p>
<p><div class="codetitle"><span><a data="69937" class="copybut" id="copybut69937"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code69937"></p>
<p>case Expression of<br />
&nbsp;&nbsp;&nbsp; Pattern1 -&gt; Expression1;<br />
&nbsp;&nbsp;&nbsp; Pattern2 -&gt; Expression2;<br />
&nbsp;&nbsp;&nbsp; %% and so on ...<br />
&nbsp;&nbsp;&nbsp; _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; Expression3<br />
end.</p>
<p></div><br />
<strong>try catch</strong></p>
<p><div class="codetitle"><span><a data="69274" class="copybut" id="copybut69274"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code69274"></p>
<p>try FunctionOrExpressions of<br />
&nbsp;&nbsp;&nbsp; Pattern1 -&gt; Expression1;<br />
&nbsp;&nbsp;&nbsp; Pattern2 -&gt; Expression2<br />
&nbsp;&nbsp;&nbsp; %% and so on ...<br />
catch<br />
&nbsp;&nbsp;&nbsp; ExType:ExPattern1 -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExExpression1;<br />
&nbsp;&nbsp;&nbsp; ExType:ExPattern2 -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExExpression2;<br />
&nbsp;&nbsp;&nbsp; %% and so on ...<br />
&nbsp;&nbsp;&nbsp; _:_ -&gt; DefaultExExpression&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % _:_ 匹配所有异常<br />
after<br />
&nbsp;&nbsp;&nbsp; AfterExpressions<br />
end<br />
</div></p>
<p><strong>消息传递匹配<br />
</strong><div class="codetitle"><span><a data="44707" class="copybut" id="copybut44707"><U>复制代码</U></a></span> 代码如下:</div><div class="codebody" id="code44707"><br />
loop() -&gt;<br />
&nbsp;&nbsp;&nbsp; receive<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {From, {rectangle, Width, Height}} -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; From ! {self(), Width * Height},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loop();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {From, {circle, R}} -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; From ! {self(), 3.14 * R * R},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loop();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {From, _Other} -&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; From ! {self(), {error, unknown_shape}}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loop()<br />
&nbsp;&nbsp;&nbsp; end.<br />
Pid = spawn(fun loop/0).<br />
Pid ! {self(), {rectangle, 10, 5}}.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % {Pid, 50}<br />
Pid ! {self(), {circle, 4}}.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % {Pid, 50.24}<br />
Pid ! {self(), {square, 10}}.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; % {Pid, {error, unknown_shape}}<br />
</div></p>
頁: [1]
查看完整版本: Erlang中的匹配模式总结