【问题标题】:Peter Norvig's use of asterisks in PAIP arraysPeter Norvig 在 PAIP 阵列中使用星号
【发布时间】:2018-04-13 09:39:35
【问题描述】:

在 Peter Norvig 的 PAIP,第 18.12 节,第 页。 643(不幸的是不是谷歌图书预览的一部分),他包括二维数组,如:

(/ (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
      )) 

所以我很茫然。

【问题讨论】:

    标签: arrays common-lisp


    【解决方案1】:

    本章为奥赛罗游戏实现了复杂的游戏玩法。

    Norvig 使用一些二维数组来获取取决于二维输入的固定值。

    *不适用未使用值

    的任意占位符

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

    以第二个数组为例,它是一个权重表。角块具有该数组中第二行的权重。角块总是稳定。如果它是stable(它总是这样,因为它不能被捕获),那么这个值就是700。因为角块不能是semi-stable(第二个值。意思是:既不是 stable 也不是 unstable)或 unstable(被捕获的即时危险,第三个值),这些值将永远不会被使用并且可以设置为任意值:Norvig 使用了*。角落根本没有这些权重的值,因此* 在此处标记。在计算中,这些标记将永远不会被使用,并且仅用于人类阅读器并将某些内容放入这些数组槽中,因为我们不能将它们留在二维数组的打印表示中。

    【讨论】:

    • 我明白了,所以*s 只是不应该使用的值的任意占位符。这本书肯定可以对此进行澄清——或者我只是错过了它?
    • @TianxiangXiong:我不记得看到它被解释过。不过好久没看书的章节了。好书,顺便说一句.. 我的最爱之一。
    猜你喜欢
    • 2020-04-07
    • 2017-11-28
    • 2017-06-18
    • 2015-08-02
    • 2018-01-09
    • 2010-11-07
    • 1970-01-01
    相关资源
    最近更新 更多