【问题标题】:Common Lisp vector printing: Vector axis is not zero: 1Common Lisp向量打印:向量轴不为零:1
【发布时间】:2015-10-31 13:27:28
【问题描述】:

这是我第一次看到这个编译器错误,有人知道它是什么吗?以及为什么我的函数不能打印我的嵌套向量。

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

【问题讨论】:

    标签: arrays vector common-lisp sbcl


    【解决方案1】:

    我可以通过简单地循环一次来打印我的向量向量。我仍然不知道那个错误是什么,但从那以后我就再也没有遇到过。

    (defun print-game ()
      (loop for i from 0 to 6 do
           (print (aref *game-board* i))))
    

    【讨论】:

      【解决方案2】:

      您正在使用代码创建一个非常奇特的向量:

      (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)的旧值,即空向量。

      【讨论】:

      • 你说得对,我正在制作一个填充后看起来像这样的结构: ("O" "X" . #()) ("O" "X" . #() ) ("X" "O" "O" "X" .#()) ("X" "O" "X" "O" .#()) ("O" "X" .#()) ( "X" . #()) ("X" "O" . #()) 我使用 :inital-element 0 的原因是我有一些东西可以将对象弹出到空数组中,哈哈。这是一个黑客。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      相关资源
      最近更新 更多