自指
“理发师只给不给自己理发的人理发,问理发师到底给不给自己理发”,这是一个悖论问题,但接下来关心的目标是为什么产生了这种悖论,先将问题简化为判断“理发师能给自己理发的真假”。为此我写了一个程序:
1 | (define x->x? |
当需要判断”理发师能给自己理发“,我们输入’(x->x? 1)’, 可以发现,经过’(to_self)’的推理,最终回到了’(x->x? 0)’,在经过’(not_to_self)’的推理,最终回到了’(x->x? 1)’本身。
也就是说,对于问题的判断最终回到了对于问题的判断,这样一层一层的递归下去,没有结束的时候,这就是悖论产生的原因。将上述的程序简化更加可以看清悖论产生的本质。
1 | (define x->x? |
根据上面,悖论产生的原因,也可以构造一个悖论“a=b,b=a,问a=?”