更改

第199行: 第199行:  
源代码1:自打印程序源代码
 
源代码1:自打印程序源代码
   −
这里面的“\n”表示换行符,即如果执行Print(‘A\nB’),则程序会输出下面的字符串:
+
这里面的“\n”表示换行符,即如果执行<code>Print(‘A\nB’)</code>,则程序会输出下面的字符串:
    
<code>A</code>
 
<code>A</code>
第205行: 第205行:  
<code>B</code>
 
<code>B</code>
   −
“+”表示将两个字符串进行串联形成一个新的字符串,例如A=’123’,B=’456’,则A+B=’123456’。
+
“+”表示将两个字符串进行串联形成一个新的字符串,例如<code>A=’123’,B=’456’,则A+B=’123456’</code>。
   −
这个自打印程序调用了一个简单的解码函数p(q),p的作用是将字符串q变换成更浅一层次的字符串。例如,如果q是“\\\’\\’\\n\\”,那么p这个函数就会计算输出“\’’\n\”。也就是说p完成了一组映射:它把“\\”映射成“\”,把“\’”映射成“’”,而把“\n”映射成回车符。显然p是可以写出来的。我们知道,由引号的引用可以形成更加深层次的虚拟世界(参见上一小节)。所以p(q)的作用就是让字符串q弹出一层虚拟世界。由于p的作用很简单,我们假设它是一个系统自带的函数,因此就不在源代码1中给出p的实现代码了。
+
这个自打印程序调用了一个简单的解码函数<math>p(q)</math>,<math>p</math>的作用是将字符串<math>q</math>变换成更浅一层次的字符串。例如,如果<math>q</math>是“\\\’\\’\\n\\”,那么<math>p</math>这个函数就会计算输出“\’’\n\”。也就是说<math>p</math>完成了一组映射:它把“\\”映射成“\”,把“\’”映射成“’”,而把“\n”映射成回车符。显然<math>p</math>是可以写出来的。我们知道,由引号的引用可以形成更加深层次的虚拟世界(参见上一小节)。所以<math>p(q)</math>的作用就是让字符串<math>q</math>弹出一层虚拟世界。由于<math>p</math>的作用很简单,我们假设它是一个系统自带的函数,因此就不在源代码1中给出<math>p</math>的实现代码了。
    
S(x)这个程序中包含了过多的“\”和“’”符号,这就导致我们理解源代码1稍显困难,下面我们将把该程序表示成下面的图,从而让读者看得更清晰一些:
 
S(x)这个程序中包含了过多的“\”和“’”符号,这就导致我们理解源代码1稍显困难,下面我们将把该程序表示成下面的图,从而让读者看得更清晰一些: