{"componentChunkName":"component---src-templates-blog-post-js","path":"/the-little-schemer-summary-3/","result":{"data":{"site":{"siteMetadata":{"title":"星雨之夜"}},"markdownRemark":{"id":"30a0c6d2-1246-5bd4-88dc-2e17cf5c5972","excerpt":"Scheme 十诫之第二诫 使用  来构建列表。 Scheme 十诫之第三诫 构建一个列表的时候，描述第一个典型的元素，之后  该元素到一般性递归上。 Scheme…","html":"<h2>Scheme 十诫之第二诫</h2>\n<p>使用 <code class=\"language-text\">cons</code> 来构建列表。</p>\n<h2>Scheme 十诫之第三诫</h2>\n<p>构建一个列表的时候，描述第一个典型的元素，之后 <code class=\"language-text\">cons</code> 该元素到一般性递归上。</p>\n<h2>Scheme 十诫之第四诫</h2>\n<p>在递归时总是改变至少一个参数。该参数必须向着不断接近结束条件而改变。改变的参数必须在结束条件中得以测试：当使用 <code class=\"language-text\">cdr</code> 时，用 <code class=\"language-text\">null?</code> 测试是否结束。</p>\n<h2>自定义函数</h2>\n<h3>(rember a lat)</h3>\n<p>定义：<code class=\"language-text\">rember</code> 函数将一个原子 <code class=\"language-text\">a</code> 和一个列表 <code class=\"language-text\">lat</code> 作为参数，生成一个新列表，新列表为剔除了首个 <code class=\"language-text\">a</code> 的 <code class=\"language-text\">lat</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> rember\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 punctuation\">(</span><span class=\"token keyword\">quote</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">(</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> <span class=\"token punctuation\">(</span><span class=\"token builtin\">cdr</span> lat<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 punctuation\">(</span><span class=\"token builtin\">cons</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> lat<span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">(</span><span class=\"token function\">rember</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>\n<h3>(firsts l)</h3>\n<p>定义：<code class=\"language-text\">firsts</code> 函数以一个列表 <code class=\"language-text\">l</code> 为参数，该列表要么为空列表，要么只包含非空列表。该函数构建出一个新列表，新列表中的元素由列表 <code class=\"language-text\">l</code> 中每个内部列表的第一个 S-表达式组成。</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> firsts\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 punctuation\">(</span><span class=\"token keyword\">quote</span> <span class=\"token punctuation\">(</span><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 punctuation\">(</span><span class=\"token builtin\">cons</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> l<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">(</span><span class=\"token function\">firsts</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><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>(insertR new old lat)</h3>\n<p>定义：<code class=\"language-text\">insertR</code> 函数有三个参数：原子 <code class=\"language-text\">new</code> 与 <code class=\"language-text\">old</code>，以及一个列表 <code class=\"language-text\">lat</code>。该函数在 <code class=\"language-text\">lat</code> 的第一个 <code class=\"language-text\">old</code> 后面插入 <code class=\"language-text\">new</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> insertR\n  <span class=\"token punctuation\">(</span><span class=\"token keyword\">lambda</span> <span class=\"token punctuation\">(</span><span class=\"token function\">new</span> old 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 punctuation\">(</span><span class=\"token keyword\">quote</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">(</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> old<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> old\n              <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> new <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>\n      <span class=\"token punctuation\">(</span><span class=\"token keyword\">else</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> lat<span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">(</span><span class=\"token function\">insertR</span> new old <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>\n<h3>(insertL new old lat)</h3>\n<p>定义：同上，不过是在列表 <code class=\"language-text\">lat</code> 中的第一个 <code class=\"language-text\">old</code> 前面插入 <code class=\"language-text\">new</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> insertL\n  <span class=\"token punctuation\">(</span><span class=\"token keyword\">lambda</span> <span class=\"token punctuation\">(</span><span class=\"token function\">new</span> old 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 punctuation\">(</span><span class=\"token keyword\">quote</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">(</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> old<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> new lat<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 punctuation\">(</span><span class=\"token builtin\">cons</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> lat<span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">(</span><span class=\"token function\">insertL</span> new old <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>\n<h3>(subst new old lat)</h3>\n<p>定义：用 <code class=\"language-text\">new</code> 替换列表 <code class=\"language-text\">lat</code> 中的第一个 <code class=\"language-text\">old</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> subst\n  <span class=\"token punctuation\">(</span><span class=\"token keyword\">lambda</span> <span class=\"token punctuation\">(</span><span class=\"token function\">new</span> old 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 punctuation\">(</span><span class=\"token keyword\">quote</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">(</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> old<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> new <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>\n      <span class=\"token punctuation\">(</span><span class=\"token keyword\">else</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> lat<span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">(</span><span class=\"token function\">subst</span> new old <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>\n<h3>(subst2 new o1 o2 lat)</h3>\n<p>定义：用 <code class=\"language-text\">new</code> 替换列表 <code class=\"language-text\">lat</code> 中的第一个 <code class=\"language-text\">o1</code> 或者第一个 <code class=\"language-text\">o2</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> subst2\n  <span class=\"token punctuation\">(</span><span class=\"token keyword\">lambda</span> <span class=\"token punctuation\">(</span><span class=\"token function\">new</span> o1 o2 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 punctuation\">(</span><span class=\"token keyword\">quote</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">(</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> o1<span class=\"token punctuation\">)</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> o2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> new <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>\n      <span class=\"token punctuation\">(</span><span class=\"token keyword\">else</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> lat<span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">(</span><span class=\"token function\">subst2</span> new o1 o2 <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>\n<h3>(multirember a lat)</h3>\n<p>定义：类似于 <code class=\"language-text\">rember</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> multirember\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 punctuation\">(</span><span class=\"token keyword\">quote</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">(</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> <span class=\"token punctuation\">(</span><span class=\"token function\">multirember</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>\n      <span class=\"token punctuation\">(</span><span class=\"token keyword\">else</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> lat<span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">(</span><span class=\"token function\">multirember</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>\n<h3>(multiinsertR new old lat)</h3>\n<p>定义：类似于 <code class=\"language-text\">insertR</code>，不过是在 <code class=\"language-text\">lat</code> 中的所有 <code class=\"language-text\">old</code> 后面都插入 <code class=\"language-text\">new</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> multiinsertR\n  <span class=\"token punctuation\">(</span><span class=\"token keyword\">lambda</span> <span class=\"token punctuation\">(</span><span class=\"token function\">new</span> old 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 punctuation\">(</span><span class=\"token keyword\">quote</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">(</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> old<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> old\n              <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> new\n                    <span class=\"token punctuation\">(</span><span class=\"token function\">multiinsertR</span> new old <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>\n      <span class=\"token punctuation\">(</span><span class=\"token keyword\">else</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> lat<span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">(</span><span class=\"token function\">multiinsertR</span> new old <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>\n<h3>(multiinsertL new old lat)</h3>\n<p>定义：类似于 <code class=\"language-text\">insertL</code>，不过是在 <code class=\"language-text\">lat</code> 中的所有 <code class=\"language-text\">old</code> 前面插入 <code class=\"language-text\">new</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> multiinsertL\n  <span class=\"token punctuation\">(</span><span class=\"token keyword\">lambda</span> <span class=\"token punctuation\">(</span><span class=\"token function\">new</span> old 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 punctuation\">(</span><span class=\"token keyword\">quote</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">(</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> old<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> new\n              <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> old\n                    <span class=\"token punctuation\">(</span><span class=\"token function\">multiinsertL</span> new old <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>\n      <span class=\"token punctuation\">(</span><span class=\"token keyword\">else</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> lat<span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">(</span><span class=\"token function\">multiinsertL</span> new old <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>\n<h3>(multisubst new old lat)</h3>\n<p>定义：类似于 <code class=\"language-text\">subst</code>，不过是用 <code class=\"language-text\">new</code> 替换列表 <code class=\"language-text\">lat</code> 中的所有 <code class=\"language-text\">old</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> multisubst\n  <span class=\"token punctuation\">(</span><span class=\"token keyword\">lambda</span> <span class=\"token punctuation\">(</span><span class=\"token function\">new</span> old 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 punctuation\">(</span><span class=\"token keyword\">quote</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">(</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> old<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> new\n              <span class=\"token punctuation\">(</span><span class=\"token function\">multisubst</span> new old <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>\n      <span class=\"token punctuation\">(</span><span class=\"token keyword\">else</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">cons</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">car</span> lat<span class=\"token punctuation\">)</span>\n                  <span class=\"token punctuation\">(</span><span class=\"token function\">multisubst</span> new old <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 知识点整理（三）：用 cons 构筑恢宏","date":"2018 年 12 月 05 日","description":"第三章主要介绍了 cons 的用法，并一步步实现了移除、替换、插入元素等几个常用的函数。"}}},"pageContext":{"slug":"/the-little-schemer-summary-3/","previous":{"fields":{"slug":"/the-little-schemer-summary-2/"},"frontmatter":{"title":"The Little Schemer 知识点整理（二）：处理，处理，反复处理……"}},"next":{"fields":{"slug":"/the-little-schemer-summary-4/"},"frontmatter":{"title":"The Little Schemer 知识点整理（四）：数字游戏"}}}}}