常见的lisp数组和哈希表奇怪?

时间:2012-10-04 07:50:25

标签: hashtable common-lisp

我试图在64平方bitboard中存储棋子的攻击动作。基本上我使用任何哈希表数组来执行此操作:

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

但是,我注意到当我填充数组中的每个哈希表(每个大约1000个元素)时,它与另一个哈希表相交。这是一个散列表具有来自另一个散列表的值,即使我没有把它放在那里。

我在想象吗?这是一个错误吗?

2 个答案:

答案 0 :(得分:4)

您可以创建一个哈希表(使用make-hash-table),然后在数组的所有元素中设置该哈希表。要做你想做的事,你想要做一个:

  • 创建一个空数组,循环并将每个索引设置为一个新的哈希表
  • 创建64个新哈希表的列表并使用:INITIAL-CONTENTS在创建时填充数组

这样,哈希表将是独立的,而不是存储64次的相同哈希表。

答案 1 :(得分:1)

您应该使用:INITFORM而不是:initial-element来获取不同的哈希表

(我的回答是错误的,见Vatine的)