我们可以把计算机看成一个函数,将一份代码映成一段输出,那么输出为代码本事就是数学中不动点。任意语言都有很多相应版本的这种程序,原理都是类似的,我自己写的 C++ 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<string>
using namespace std;
string a[10];
int main(){
a[0]="#include<iostream>";
a[1]="#include<string>";
a[2]="using namespace std;";
a[3]="string a[10];";
a[4]="int main(){";
a[5]="for(int i=0;i<5;++i) cout<<a[i]<<endl;";
a[6]="for(int i=0;i<10;++i) cout<<char(97)<<char(91)<<i<<char(93)<<char(61)<<char(34)<<a[i]<<char(34)<<char(59)<<endl;";
a[7]="for(int i=5;i<10;++i) cout<<a[i]<<endl;";
a[8]="return 0;";
a[9]="}";
for(int i=0;i<5;++i) cout<<a[i]<<endl;
for(int i=0;i<10;++i) cout<<char(97)<<char(91)<<i<<char(93)<<char(61)<<char(34)<<a[i]<<char(34)<<char(59)<<endl;
for(int i=5;i<10;++i) cout<<a[i]<<endl;
return 0;
}

代码原理和步骤:

  1. 先把头写好,定义好数组,记作头部
  2. 开始对数组赋值一直赋值到头部,然后空几行
  3. 把头用数组打印出来,再讲数组全部打印出来,再将后面的部分打印出来
  4. 再去空的几行,做数组赋值,赋值的时候后面的每一行

注意代码中特殊字符需要转义,不然就很尬了,而且代码不能用 tab 缩进

后来我又写了一篇:用 Python 打印自身的代码

文件打印就太没水平了,这里就不给出了