<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>All on cnDenis的笔记</title><link>https://blog.cndenis.com/tags/all.html</link><description>Recent content in All on cnDenis的笔记</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 12 Jan 2015 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.cndenis.com/tags/all/index.xml" rel="self" type="application/rss+xml"/><item><title>【Erlang】lists:all/2 和 lists:any/2 对于空列表运算结果是啥?</title><link>https://blog.cndenis.com/Erlang/2015/01/all_for_empty_list_is_true.html</link><pubDate>Mon, 12 Jan 2015 00:00:00 +0000</pubDate><guid>https://blog.cndenis.com/Erlang/2015/01/all_for_empty_list_is_true.html</guid><description>&lt;p&gt;先说结果, 无论F是什么, 结果都是这样:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-erlang" data-lang="erlang"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nn"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nn"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;F&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;换成其它语言也一样.&lt;/p&gt;
&lt;h3 id="listsallf---true"&gt;lists:all(F, []) = true
&lt;/h3&gt;&lt;p&gt;从逻辑上, 假如 A 和 B 是两个列表, 那么:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;all(F, A ++ B) = all(F, A) andalso all(F, B)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;显然, 如果一个大列表全部都是true, 把大列表分割成两个子列表后,
每个子列表中所有元素也都是true.&lt;/p&gt;
&lt;p&gt;Erlang中, A = A ++ [], 所以&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;all(F, A ++ []) = all(F, A) andalso all(F, [])
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;只有 all(F, []) = true 才能保证上式恒成立.&lt;/p&gt;
&lt;h3 id="listsanyf---false"&gt;lists:any(F, []) = false
&lt;/h3&gt;&lt;p&gt;类似的,&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;any(F, A ++ B) = any(F, A) orelse all(F, B)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;因此,&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;any(F, A ++ []) = any(F, A) orelse all(F, [])
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;只有当 all(F, []) = false 才可以保证上式恒成立.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;参考:&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="http://stackoverflow.com/questions/11979683/why-python-built-in-all-function-returns-true-for-empty-iterables" target="_blank" rel="noopener"
 &gt;http://stackoverflow.com/questions/11979683/why-python-built-in-all-function-returns-true-for-empty-iterables&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>