透过技术的表象看本质
2014-11-17陈凯
陈凯
以往的文章里,我曾经介绍过如何通过字符串替换来实现逻辑运算。一个很简单的字符串替换模型(如搜索字符串,看见120就换成012,看见021就换成210,看见1221就换成0000),就能实现与、或、非、异或等逻辑运算。理论上说,用一个字符串替换系统可以设计出一台具有复杂功能的计算机来。这其中有个很微妙的问题,字符串匹配和替换的过程中的“匹配”,本质上也是逻辑判断过程,“当看见120就换成210”这个动作,难道不正是具有逻辑判断作用的一句指令吗?于是就陷入到一个怪圈之中:人们能够用字符串替换的方式,实现各种逻辑门,并且用这些逻辑门搭建出复杂的运算系统。不过人们为了能够做出一个能实现自动的字符串替换的系统,就需要先有一个能够做复杂运算的计算机,而这个计算机是用各种逻辑门搭建出来的。这就好像是说,鸡是由蛋孵出来的,而蛋是由鸡所生的,那么先有鸡,还是先有蛋呢?这个问题并没有固定统一的答案,本文希望通过一个拼图游戏为解答问题带来一些启示。
● 拼图游戏里的逻辑运算
下面是拼图游戏的制作过程。
1.剪裁若干纸片,使其具有如这样的形状,正方形的凸出和缺口,都代表数字0,这样形状的纸片要多做一些。
2.剪裁若干纸片,使其具有如这样的形状,正方形的凸出和缺口代表数字0,三角形的凸出和缺口代表1,弧形的凸出和缺口代表2。这张拼图的内在含义是,把021替换为210。
3.把刚才那张纸片翻个面,就变成了,内在含义是把120替换成012。类似的,也可以做出具有把1221替换成0000功能的拼图。
4.接下来就可以把这些纸片排列成一排,然后用这些纸片来摆出逻辑表达式。比如“00120000000012000021”,根据往期的文章,这串字符串的意思,其实是进行“1 and 1”的逻辑运算,摆成拼图就是这样的(如图1)。
如果是由下往上拼图,那么得到的图案只可能是这样的(如图2)。
将上面一行拼图还原成数字符号,就是000120000000012000210,如果按前面所说的规则一直把这个拼图游戏玩下去,最后就能得到00000000000000000012,原始的字符串中有两个“12”用以代表布尔逻辑值“1”,反复替换后在字符串右侧得到一个“12”,也就是说结果为“1”,于是就实现了“1 and 1”的逻辑运算。
● 拼图游戏的意义
这个拼图游戏有着很重要的启发意义。假设有人要建造一台计算机,理论上他只需要做出大量类似于拼版可相互嵌入的积木块,然后把这些积木块放进一个大罐子里,并不需要某个聪明人去一块一块地摆放这些积木,只要将这个大罐子不停摇晃,若是摇晃的时间足够足够长,积木自动就会找到自己恰当的位置相互嵌合在一起。而各种逻辑表达式依靠这种随机的力量,自然而然就产生出来并开始自动运行了,这其实在某种程度上解答了前面提出的问题:人们并不需要为了实现某个逻辑运算,而去搭建一个“以实现这个逻辑运算”为目的的逻辑运算系统(否则就陷入了无法解套的怪圈),因为充满着随机特性的大自然天生就提供了可用于搭建逻辑运算系统的材料,如今计算机所大量使用的是硅晶材料,但若自然界中没有硅晶,也应该能找到其他替代的材料,如量子点、DNA之类的。endprint
以往的文章里,我曾经介绍过如何通过字符串替换来实现逻辑运算。一个很简单的字符串替换模型(如搜索字符串,看见120就换成012,看见021就换成210,看见1221就换成0000),就能实现与、或、非、异或等逻辑运算。理论上说,用一个字符串替换系统可以设计出一台具有复杂功能的计算机来。这其中有个很微妙的问题,字符串匹配和替换的过程中的“匹配”,本质上也是逻辑判断过程,“当看见120就换成210”这个动作,难道不正是具有逻辑判断作用的一句指令吗?于是就陷入到一个怪圈之中:人们能够用字符串替换的方式,实现各种逻辑门,并且用这些逻辑门搭建出复杂的运算系统。不过人们为了能够做出一个能实现自动的字符串替换的系统,就需要先有一个能够做复杂运算的计算机,而这个计算机是用各种逻辑门搭建出来的。这就好像是说,鸡是由蛋孵出来的,而蛋是由鸡所生的,那么先有鸡,还是先有蛋呢?这个问题并没有固定统一的答案,本文希望通过一个拼图游戏为解答问题带来一些启示。
● 拼图游戏里的逻辑运算
下面是拼图游戏的制作过程。
1.剪裁若干纸片,使其具有如这样的形状,正方形的凸出和缺口,都代表数字0,这样形状的纸片要多做一些。
2.剪裁若干纸片,使其具有如这样的形状,正方形的凸出和缺口代表数字0,三角形的凸出和缺口代表1,弧形的凸出和缺口代表2。这张拼图的内在含义是,把021替换为210。
3.把刚才那张纸片翻个面,就变成了,内在含义是把120替换成012。类似的,也可以做出具有把1221替换成0000功能的拼图。
4.接下来就可以把这些纸片排列成一排,然后用这些纸片来摆出逻辑表达式。比如“00120000000012000021”,根据往期的文章,这串字符串的意思,其实是进行“1 and 1”的逻辑运算,摆成拼图就是这样的(如图1)。
如果是由下往上拼图,那么得到的图案只可能是这样的(如图2)。
将上面一行拼图还原成数字符号,就是000120000000012000210,如果按前面所说的规则一直把这个拼图游戏玩下去,最后就能得到00000000000000000012,原始的字符串中有两个“12”用以代表布尔逻辑值“1”,反复替换后在字符串右侧得到一个“12”,也就是说结果为“1”,于是就实现了“1 and 1”的逻辑运算。
● 拼图游戏的意义
这个拼图游戏有着很重要的启发意义。假设有人要建造一台计算机,理论上他只需要做出大量类似于拼版可相互嵌入的积木块,然后把这些积木块放进一个大罐子里,并不需要某个聪明人去一块一块地摆放这些积木,只要将这个大罐子不停摇晃,若是摇晃的时间足够足够长,积木自动就会找到自己恰当的位置相互嵌合在一起。而各种逻辑表达式依靠这种随机的力量,自然而然就产生出来并开始自动运行了,这其实在某种程度上解答了前面提出的问题:人们并不需要为了实现某个逻辑运算,而去搭建一个“以实现这个逻辑运算”为目的的逻辑运算系统(否则就陷入了无法解套的怪圈),因为充满着随机特性的大自然天生就提供了可用于搭建逻辑运算系统的材料,如今计算机所大量使用的是硅晶材料,但若自然界中没有硅晶,也应该能找到其他替代的材料,如量子点、DNA之类的。endprint
以往的文章里,我曾经介绍过如何通过字符串替换来实现逻辑运算。一个很简单的字符串替换模型(如搜索字符串,看见120就换成012,看见021就换成210,看见1221就换成0000),就能实现与、或、非、异或等逻辑运算。理论上说,用一个字符串替换系统可以设计出一台具有复杂功能的计算机来。这其中有个很微妙的问题,字符串匹配和替换的过程中的“匹配”,本质上也是逻辑判断过程,“当看见120就换成210”这个动作,难道不正是具有逻辑判断作用的一句指令吗?于是就陷入到一个怪圈之中:人们能够用字符串替换的方式,实现各种逻辑门,并且用这些逻辑门搭建出复杂的运算系统。不过人们为了能够做出一个能实现自动的字符串替换的系统,就需要先有一个能够做复杂运算的计算机,而这个计算机是用各种逻辑门搭建出来的。这就好像是说,鸡是由蛋孵出来的,而蛋是由鸡所生的,那么先有鸡,还是先有蛋呢?这个问题并没有固定统一的答案,本文希望通过一个拼图游戏为解答问题带来一些启示。
● 拼图游戏里的逻辑运算
下面是拼图游戏的制作过程。
1.剪裁若干纸片,使其具有如这样的形状,正方形的凸出和缺口,都代表数字0,这样形状的纸片要多做一些。
2.剪裁若干纸片,使其具有如这样的形状,正方形的凸出和缺口代表数字0,三角形的凸出和缺口代表1,弧形的凸出和缺口代表2。这张拼图的内在含义是,把021替换为210。
3.把刚才那张纸片翻个面,就变成了,内在含义是把120替换成012。类似的,也可以做出具有把1221替换成0000功能的拼图。
4.接下来就可以把这些纸片排列成一排,然后用这些纸片来摆出逻辑表达式。比如“00120000000012000021”,根据往期的文章,这串字符串的意思,其实是进行“1 and 1”的逻辑运算,摆成拼图就是这样的(如图1)。
如果是由下往上拼图,那么得到的图案只可能是这样的(如图2)。
将上面一行拼图还原成数字符号,就是000120000000012000210,如果按前面所说的规则一直把这个拼图游戏玩下去,最后就能得到00000000000000000012,原始的字符串中有两个“12”用以代表布尔逻辑值“1”,反复替换后在字符串右侧得到一个“12”,也就是说结果为“1”,于是就实现了“1 and 1”的逻辑运算。
● 拼图游戏的意义
这个拼图游戏有着很重要的启发意义。假设有人要建造一台计算机,理论上他只需要做出大量类似于拼版可相互嵌入的积木块,然后把这些积木块放进一个大罐子里,并不需要某个聪明人去一块一块地摆放这些积木,只要将这个大罐子不停摇晃,若是摇晃的时间足够足够长,积木自动就会找到自己恰当的位置相互嵌合在一起。而各种逻辑表达式依靠这种随机的力量,自然而然就产生出来并开始自动运行了,这其实在某种程度上解答了前面提出的问题:人们并不需要为了实现某个逻辑运算,而去搭建一个“以实现这个逻辑运算”为目的的逻辑运算系统(否则就陷入了无法解套的怪圈),因为充满着随机特性的大自然天生就提供了可用于搭建逻辑运算系统的材料,如今计算机所大量使用的是硅晶材料,但若自然界中没有硅晶,也应该能找到其他替代的材料,如量子点、DNA之类的。endprint