Common Lisp 矢量打印:矢量轴不为零:1
Common Lisp vector printing: Vector axis is not zero: 1
这是我第一次看到这个编译器错误,有人知道它是什么吗?以及为什么我的函数无法打印我的嵌套向量。
(defvar *col-lookup* #.(let ((ht (make-hash-table)))
(loop for (key . value) in
'(
(A . 0) (B . 1) (C . 2)
(D . 3) (E . 4) (F . 5) (G . 6))
do (setf (gethash key ht) value))
ht))
;; vector of vectors
(defparameter *game-board*
(make-array 7 :initial-element (make-array 0 :initial-element 0)))
;;make move lookup character in table then push X onto vector of value of key
(defun move (c)
(let ((place (gethash c *col-lookup*)))
(cond ((oddp *turn-count*)
(push "X" (aref *game-board* place))
(incf *turn-count*))
((push "O" (aref *game-board* place))
(incf *turn-count*)))))
我能够通过简单地循环一次来打印我的向量向量。我仍然不知道那个错误是什么,但从那以后我就没有 运行 进去了。
(defun print-game ()
(loop for i from 0 to 6 do
(print (aref *game-board* i))))
您正在使用以下代码创建一个非常奇特的向量向量:
(make-array 7 :initial-element (make-array 0 :initial-element 0)))
此代码将创建一个包含 7 个元素的向量,每个元素都是一个包含 0 个元素的向量(即空向量)(请注意,将初始元素设为 0 是无用的,因为没有要分配的元素) .如果你打印它,你应该看到:
#(#() #() #() #() #() #() #())
意思就是这个,一个有七个空向量的向量。因此,如果您尝试使用 (aref (aref *game-board*) 1) 2)
之类的内容访问内部向量,则会出现错误。
最后请注意,在函数 move
的代码中,您使用:
(push "X" (aref *game-board* place))
其作用不是修改 place
处的内部向量,而是将 (aref *game-board* place)
的旧值替换为字符串 "X"
的 cons
和(aref *game-board* place)
的旧值,空向量。
这是我第一次看到这个编译器错误,有人知道它是什么吗?以及为什么我的函数无法打印我的嵌套向量。
(defvar *col-lookup* #.(let ((ht (make-hash-table)))
(loop for (key . value) in
'(
(A . 0) (B . 1) (C . 2)
(D . 3) (E . 4) (F . 5) (G . 6))
do (setf (gethash key ht) value))
ht))
;; vector of vectors
(defparameter *game-board*
(make-array 7 :initial-element (make-array 0 :initial-element 0)))
;;make move lookup character in table then push X onto vector of value of key
(defun move (c)
(let ((place (gethash c *col-lookup*)))
(cond ((oddp *turn-count*)
(push "X" (aref *game-board* place))
(incf *turn-count*))
((push "O" (aref *game-board* place))
(incf *turn-count*)))))
我能够通过简单地循环一次来打印我的向量向量。我仍然不知道那个错误是什么,但从那以后我就没有 运行 进去了。
(defun print-game ()
(loop for i from 0 to 6 do
(print (aref *game-board* i))))
您正在使用以下代码创建一个非常奇特的向量向量:
(make-array 7 :initial-element (make-array 0 :initial-element 0)))
此代码将创建一个包含 7 个元素的向量,每个元素都是一个包含 0 个元素的向量(即空向量)(请注意,将初始元素设为 0 是无用的,因为没有要分配的元素) .如果你打印它,你应该看到:
#(#() #() #() #() #() #() #())
意思就是这个,一个有七个空向量的向量。因此,如果您尝试使用 (aref (aref *game-board*) 1) 2)
之类的内容访问内部向量,则会出现错误。
最后请注意,在函数 move
的代码中,您使用:
(push "X" (aref *game-board* place))
其作用不是修改 place
处的内部向量,而是将 (aref *game-board* place)
的旧值替换为字符串 "X"
的 cons
和(aref *game-board* place)
的旧值,空向量。