1

チェスの駒の攻撃の動きを 64 正方形のビットボードに保存しようとしています。基本的に、これを行うためにハッシュテーブルの配列を使用しています:

(defvar attacks (make-array '(64) :initial-element (make-hash-table))

ただし、配列内の各ハッシュテーブル (それぞれ約 1000 要素) を埋めると、別のハッシュテーブルと交差することに気付きました。それは、私がそこに入れなかったとしても、あるハッシュテーブルが別のハッシュテーブルからの値を持っているということです。

私は物事を想像していますか?これはバグですか?

4

2 に答える 2

4

(make-hash-table を使用して) 単一のハッシュ テーブルを作成し、それを配列のすべての要素に設定します。やりたいことをするには、次のいずれかを実行します。

  • 空の配列を作成し、ループして各インデックスを新しいハッシュ テーブルに設定します。
  • 64 個の新しいハッシュ テーブルのリストを作成し、作成時に :INITIAL-CONTENTS を使用して配列にデータを入力します。

そうすれば、同じハッシュ テーブルが 64 回保存されるのではなく、ハッシュ テーブルが別々になります。

于 2012-10-04T08:59:40.283 に答える
0

:initial-element の代わりに :INITFORM を使用して、異なるハッシュテーブルを取得する必要があります

(私の答えは間違っています。Vatin's を参照してください)

于 2012-10-04T08:14:20.580 に答える