打字猴:1.701066396e+09
1701066396
1701066397 这个看似简单的问题其实关系到第4章介绍过的哥德尔和图灵的工作。解决方法同时也包含了生物系统本身绕开无穷反复的基本途径。20世纪匈牙利数学家冯·诺依曼在研究一个更复杂的问题时,首先发现了这个问题的答案。
1701066398
1701066399 冯·诺依曼是量子力学、经济学等多个领域的先驱,也是最早设计电子计算机的人之一。他的设计中包含中央处理单元和可以存储程序和数据的随机存取存储器。这些至今仍然是现代计算机的基础。冯·诺依曼也是最早深刻认识到计算和生物之间联系的科学家之一。他在生命最后的岁月里一直致力于解决机器如何才能复制自身的问题。他给出了第一个能自我复制的机器的完整设计。我在后面展示的自复制计算机程序就是受他的“自复制自动机”启发,并以简化的方式阐释其基本原则。
1701066400
1701066401 在介绍自复制程序之前,还要先解释一些会用到的编程语言的相关知识。
1701066402
1701066403 参考图8.1给出的计算机存储器示意图。在我们高度简化的例子中,计算机存储器由有编号的位置或“地址”组成,图中编号为1—5,依次往后。各位置中有一些字符。这些字符可以作为程序的指令或程序使用的数据。如果执行当前存储的程序,会显示输出:
1701066404
1701066405 Hello, world!
1701066406
1701066407 Goodbye.
1701066408
1701066409
1701066410
1701066411
1701066412 ▲图8.1 计算机存储器简化示意图,位置用1—5依次编号,其中4个存储有程序。指令指针指向计算机当前存储的指令。有些指令行前面带有空格,在执行的时候会被忽略
1701066413
1701066414 要执行程序,计算机要有一个“指令指针”——同样存储在存储器中的一个数字,记录当前执行的指令在存储器中的位置。指令指针——简记为ip——最初设为程序第一行的存储地址。我们称之为“指向”那条指令。在计算的每一步ip指向的指令会被执行,ip加1。
1701066415
1701066416 例如,在图8.1中,ip的值为2,也就是说指向的是print(“Hello, world!”)。
1701066417
1701066418 我们称ip为变量,因它的值随着计算的进行而不断变化。
1701066419
1701066420 还可以定义变量line[n]表示地址n中的字符串。例如,指令print(line[2])会显示输出:
1701066421
1701066422 print(“Hello, world!”)
1701066423
1701066424 此外,我们的编程语言中还包括loop指令(循环)。例如,下面的程序代码:
1701066425
1701066426 x=0
1701066427
1701066428 loop until x=4
1701066429
1701066430 {
1701066431
1701066432 print(“Hello, world!”)
1701066433
1701066434 x=x+1
1701066435
1701066436 }
1701066437
1701066438 会输出:
1701066439
1701066440 Hello, world!
1701066441
1701066442 Hello, world!
1701066443
1701066444 Hello, world!
1701066445
[ 上一页 ]  [ :1.701066396e+09 ]  [ 下一页 ]