好的 下面我们来完成再生过程 再生的意思是 请求海龟们进行自我复制 我们通常使用孵化 (hatch) 步骤来让 海龟们进行自我复制 也就是说 请求每个海龟 孵化出两个海龟 并且在缺省时 孵化出的子海龟 会继承父代海龟的所有特征 前面我已经提到了 我们需要对隔代关系进行跟踪 这就包括 赋给海龟一个自定义变量 我将这个海龟自身变量 定义为 generation 因此 现在当我们新建一个海龟时 在任何时候 通过特定的步骤新建海龟时 都会自动地生成一个变量叫 generation 并且当出现有 hatch 的这行命令时 generation 这个变量也应该出现 它将会自动被设为和父代海龟 具有相同值的变量 但这不是我们想要的些 我们想要的是下一代的 generation 变量 设为 这里我们设为 generation of myself + 1 这里应该加上方括号 所以 实际上我们做的事情是 对 hatch 后面的东西 也就是新孵化出的一代 用一条语句来赋值 所以这里我做的唯一一件事是 将它们的 generation 变量 设置为 generation of myself 的值加1 而 generation of myself 的值在中括号的外面 所以实际上我在对其值进行一个叠加 这里好像我有点不太确定 我不敢确定这里需不需要中括号 有两个办法 第一种办法是可以查阅快速帮助中 有关 myself 的使用规则 我们来看看 嗯 很显然 确实需要加上中括号使用 这里它给的例子使用了的 这里它解释了 self 和 myself 的区别 其实我们之前应该花点时间看看这些帮助文件 我想现在应该没问题了 所以 我们要孵化2个新的 然后对其进行操作 为了方便观察 我们可以将它们的颜色设为红色 并让它们向前前进3个单位 这样我们就能很容易地看出 这个再生功能是不是成功 那我们试试吧 回到前面 我们暂时先把这条语句注释掉 然后再来测试我们的代码 我们先单击 setup 然后单击 step 看起来好像 每一个海龟都孵化出了... 让我们把主体数量设置少一点再来看 新建五个主体 然后再 step 看起来似乎情况不妙 哦我知道了 对了 我想这些主体继承的特征是没问题的 1 2 3... (数数中) 有时候你建模时确实会感到很困惑 因为你不知道你到底生成了多少个海龟 这时候最简单的办法是 用一句命令 show count turtles 来显示出海龟的数量 对我这个情况 看起来好像是10个海龟 但实际上我们看到 一共有15个 所以这里有些海龟是相互重叠了 这时候你可以做的是 你可以点击一下这些海龟 你可以看到第11和12个海龟重叠在一起了 好的 那么现在没问题了 孵化功能让子代继承了父代的特征 这也是它们重叠在一起的原因 之后我们可以让它们散开分布 现在我们暂时不考虑这个问题 好的 成功完成再生 (reproduction) 了 现在 我们可能会想知道 generation 能否正常显示隔代关系 所以我们回到前面的界面 如果我们监视这个海龟 我们可以找到它的代的变量 咦 我怎么没看到呢 我再来看看这个海龟呢 好吧 还是没找到 我们来看看哪里没对 我们还是先把这里注释掉 执行 setup 新建 监测这个海龟 现在有了 可能刚才我没 setup 现在我们能看到表示代的变量了 这是第0代 表示3号海龟就是第0代 然后我们点 step 跟进 再来看看 希望我们能有好运 这里我们看到它是第1代 所以我们在逐渐增加代 (generation) 的值 所以你可以看到 它的代值是1 表示第1代 而我们初始的那个海龟 绿色表示的那个 代值是0 而现在新孵出的子代 代值是1 所以 generation 功能就运行成功了 好的 接下来我们要 请求父代海龟死亡 很显然我们需要随时跟踪 知道我们处理的海龟是哪一代 因此需要一个全局函数 我们声明一个新的全局变量叫 current-generation 我们每一次执行 step 我们也要同时对 current-generation 加1 这让我们能够跟踪我们正在操作的海龟 告诉我们需要让哪些死亡 所以每次当我们执行 step 我们都要增大一次这个变量的值 初值为0 每次我们对其值加1 然后我们要让父代死亡 请求 generation 小于或等于 current-generation 的那些海龟 这里也是最棒的部分 你建立了这些主体集合 你可以只对某些主体进行操作 所以我们不需要对每一个海龟进行操作 我们只需要关心那些自身的 generation 变量 小于或等于 current-generation 值的那些海龟 这里我不太确定 貌似应该用小于而不是小于等于 好的 然后我们要请求这部分海龟死亡 好的 我们回到前面的界面 执行 setup 新建 step 跟进下一步 看起来好像我们不应该 设置这些海龟为红色 我们将颜色设为一个随机的数值 比如100 这样我们就会看到不同的颜色 然后我们还是让它们向前移动 前进一个随机的距离 这样我们应该能很容易地看出来了 我们看到了不同代的海龟 并且海龟的数量在不断增加 你可以看到颜色在不断变化 这告诉我们 产生了很多不同的代 我们可以跟踪观察它们 现在产生了很多很多海龟 我们挑一个 第20000海龟来监视 它只是第12代 但我们已经有了20000个海龟 因为海龟的数量是呈指数级增长的 好的 现在我们完成了让父代死亡的任务 总的来说 完成的要点在于 我们需要借助某个条件 难点在于我们不能让 再生过程无限制地进行下去 一种简单的方法就是 建立某个情形 或者说个体死亡的条件 根据拥挤的程度等因素来决定 好的 父代死亡 我们加上这句 compete-with-nature (与自然竞争) 这是一个进化生物学的概念 个体之间相互竞争 同时个体也要以某种方式与环境竞争 在这里我们可以想象 它们为了生存空间 而跟同伴进行某种竞争 其实我应该把这句改成 compete-for-space (为空间而竞争) 好的