{"componentChunkName":"component---src-templates-blog-post-js","path":"/the-little-schemer-summary-2/","result":{"data":{"site":{"siteMetadata":{"title":"星雨之夜"}},"markdownRemark":{"id":"2eb08d27-8553-5088-94c6-7b11162910ba","excerpt":"准备知识  : 判断 S-表达式  是否为一个原子。  : 总是 true。  : 询问两个问题  和 ，一次问一个。如果  的答案为 true，则停止问第二个问题 ，答案为 true。否则继续询问，答案为  的答案（true 或者 false）。  : 问问题。  : 创建一个函数。  : 为函数命名。 Scheme…","html":"<h2>准备知识</h2>\n<p><code class=\"language-text\">(atom? a)</code> : 判断 S-表达式 <code class=\"language-text\">a</code> 是否为一个原子。<br>\n<code class=\"language-text\">(else ...)</code> : 总是 true。<br>\n<code class=\"language-text\">(or a b)</code> : 询问两个问题 <code class=\"language-text\">a</code> 和 <code class=\"language-text\">b</code>，一次问一个。如果 <code class=\"language-text\">a</code> 的答案为 true，则停止问第二个问题 <code class=\"language-text\">b</code>，答案为 true。否则继续询问，答案为 <code class=\"language-text\">b</code> 的答案（true 或者 false）。</p>\n<p><code class=\"language-text\">(cond ...)</code> : 问问题。<br>\n<code class=\"language-text\">(lambda ...)</code> : 创建一个函数。<br>\n<code class=\"language-text\">(define ...)</code> : 为函数命名。</p>\n<h2>Scheme 十诫之第一诫</h2>\n<p>在表述任意函数时，总是将询问 <code class=\"language-text\">null?</code> 作为诸问题之首。</p>\n<h2>自定义函数</h2>\n<h3>(lat? l)</h3>\n<p>定义：<code class=\"language-text\">lat?</code> 函数判断列表 <code class=\"language-text\">l</code> 中的元素是否都是原子。</p>\n<p>实现：</p>\n<div class=\"gatsby-highlight\" data-language=\"scheme\"><pre class=\"language-scheme\"><code class=\"language-scheme\"><span class=\"token punctuation\">(</span><span class=\"token keyword\">define</span> lat?\n  <span class=\"token punctuation\">(</span><span class=\"token keyword\">lambda</span> <span class=\"token punctuation\">(</span><span class=\"token function\">l</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">(</span><span class=\"token keyword\">cond</span>\n      <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">null?</span> l<span class=\"token punctuation\">)</span> <span class=\"token boolean\">#t</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token function\">atom?</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> l<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">(</span><span class=\"token function\">lat?</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">cdr</span> l<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">(</span><span class=\"token keyword\">else</span> <span class=\"token boolean\">#f</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h3>(member? a lat)</h3>\n<p>定义：<code class=\"language-text\">member?</code> 判断列表 <code class=\"language-text\">lat</code> 中是否存在 <code class=\"language-text\">a</code>。</p>\n<p>实现：</p>\n<div class=\"gatsby-highlight\" data-language=\"scheme\"><pre class=\"language-scheme\"><code class=\"language-scheme\"><span class=\"token punctuation\">(</span><span class=\"token keyword\">define</span> member?\n  <span class=\"token punctuation\">(</span><span class=\"token keyword\">lambda</span> <span class=\"token punctuation\">(</span><span class=\"token function\">a</span> lat<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">(</span><span class=\"token keyword\">cond</span>\n      <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">null?</span> lat<span class=\"token punctuation\">)</span> <span class=\"token boolean\">#f</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">(</span><span class=\"token keyword\">else</span> <span class=\"token punctuation\">(</span><span class=\"token function\">or</span> <span class=\"token punctuation\">(</span><span class=\"token function\">eq?</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> lat<span class=\"token punctuation\">)</span> a<span class=\"token punctuation\">)</span>\n                <span class=\"token punctuation\">(</span><span class=\"token function\">member?</span> a <span class=\"token punctuation\">(</span><span class=\"token builtin\">cdr</span> lat<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span></code></pre></div>","frontmatter":{"title":"The Little Schemer 知识点整理（二）：处理，处理，反复处理……","date":"2018 年 12 月 05 日","description":"第二章开始引入递归思想。看书的时候一开始没看懂，以为印错了，一模一样的内容出现了很多次，当发现问题所在的时候，不禁莞尔，原来如此啊。"}}},"pageContext":{"slug":"/the-little-schemer-summary-2/","previous":{"fields":{"slug":"/the-little-schemer-summary-1/"},"frontmatter":{"title":"The Little Schemer 知识点整理（一）：玩具总动员"}},"next":{"fields":{"slug":"/the-little-schemer-summary-3/"},"frontmatter":{"title":"The Little Schemer 知识点整理（三）：用 cons 构筑恢宏"}}}}}