Peter Norvig在PAIP阵列中使用星号

时间:2017-11-01 05:13:47

标签: arrays common-lisp

Peter Norvig的PAIP,第18.12节,pg。 643(不幸的是不是Google图书预览的一部分),他包括2D阵列,如:

(/ (aref '#2A((.1  .4 .7)
              (.05 .3  *)
              (.01  *  *))
         (count-edge-neighbors ...)
         (count-edge-neighbors ...)))

星号(*)代表什么?我假设了对称性的一些简写,但后来有很多重复,如:

'#2A((;stab  semi     un
      (   *     0 -2000)                ; X
      ( 700     *     *)                ; corner
      (1200   200   -25)                ; C
      (1000   200    75)                ; A
      (1000   200    50)                ; B
      (1000   200    50)                ; B
      (1000   200    75)                ; A
      (1200   200   -25)                ; C
      ( 700     *     *)                ; corner
      (   *     0 -2000)                ; X
      )) 

所以我不知所措。

1 个答案:

答案 0 :(得分:9)

本章为奥赛罗的游戏实施复杂的游戏。

Norvig使用一些2d数组来获取固定值,具体取决于二维输入。

*不适用未使用值

的任意占位符

对于2d数组中的未使用值,他使用标记,这里是符号*。请注意,选择是任意的,他可以使用任何数据对象,因为永远不会访问该值,因此不会在算术公式中使用。

以第二个数组为例,这是一个权重表。角件具有该阵列中第二行的权重。角落总是稳定。如果稳定(它总是如此,因为无法捕获),那么该值为700.因为角落不能半稳定 (第二个值。意思是:稳定不稳定)或不稳定(被捕获的直接危险,第三个值),这些值永远不会是使用和可以设置为任意值:Norvig使用*。角落根本没有这些权重的值,因此*标记了这里。在计算中,这些标记永远不会被使用,仅供人类读者使用,并将某些东西放入这些数组插槽中,因为我们不能将它们留在2d数组的打印表示中。