咒术师的记忆,#3 与 咒术师的记忆,#1 为同类剧情/故事。
虽然 托特之策略 极其适合同时对多个目标施放同一法术,但对同一目标施放多次法术就有点麻烦了。它不仅容易导致咒术的停止,运行开始后还无法添加或移除作用目标。
而绕过这些局限也很简单,换用另一种循环即可。
While 循环
While 循环是一种在既定条件达成之前一直运行的循环,比如条件可以是实体的速度达到了给定值。一个仅会复制自身再运行栈顶 iota 的图案列表就是这种循环最简单的实现方式。如果单独运行它,那么咒术会进入无限循环,除非产生事故不然不会停止。
向其中加入实际功能和一些布尔逻辑,就能创造出有用的 while 循环。前文所提无限循环的代码如下:
内省
双子之分解
赫尔墨斯之策略
反思
双子之分解
赫尔墨斯之策略
向其中加入根据条件是否运行列表内 赫尔墨斯之策略 的逻辑,达成相应条件后循环便会终止。
循环展开
“已展开循环”/“Unrolled loop”是一种更为复杂的循环。和 托特之策略 一样,构建时其迭代次数同样固定,难以增加修改。但如有需要, 卡戎之策略 可以令其提前停止。比较来看,这种循环仅产生一到两层递归深度(循环体运行所致深度不计),是其优势所在。先写定想要重复的图案列表,再多次复制,最后把所有列表合成一体,就实现了循环展开。
这一目标最简单的达成方式是 双子之分解 接 组合之馏化 ,运行后原列表会重复 2 次。可重复使用此方法以复制原列表 2 的幂次,所得的列表在运行时只会产生一层递归深度。更灵活的做法则是使用 双子之策略 产生 n 个副本,再将 n-1 个 组合之馏化 放入列表并运行,如此便能把所有原列表副本合为一体。
资料分类: | 智识界 |