【问题标题】:value not of type array不是数组类型的值
【发布时间】:2013-01-19 08:19:41
【问题描述】:

我创建了一个函数,它应该具有ARRAY 类型的词法变量:

(defun give-rank-vec (dir-1 dir-2 file-1 file-2)
  (let* ((cm-size (array-dimension (Swc (make-ff-array dir-1 file-1)
                                        (make-ff-array dir-2 file-2)) 
                                    0))
         (rank-dump-vec (make-array `(,cm-size)))     
         (Swc' (Swc (make-ff-array dir-1 file-1)
                    (make-ff-array dir-2 file-2))) 
         (Sbc' (Sbc (make-ff-array dir-1 file-1) 
                    (make-ff-array dir-2 file-2))))
    (dotimes (j cm-size) 
      (setf (svref rank-dump-vec j) 
            (/ (get-element Sbc' j j) 
               (get-element Swc' j j))))   
   rank-dump-vec))  



(defun Sbc (cmatrix1 cmatrix2)
  (add-matrices (Si cmatrix1) 
                (Si cmatrix2)))


(defun add-matrices (A B)
  (let ((C (make-array (array-dimensions A))))
    (dotimes (i (array-dimension A 0))
      (dotimes (j (array-dimension A 1))
        (setf (aref C i j) (+ (aref A i j) (aref B i j)))))
    C))

但是,当我对这个函数进行 SLIME 时,我得到了错误:

The value
  (SBC (MAKE-FF-ARRAY DIR-1 FILE-1)
       (MAKE-FF-ARRAY DIR-2 FILE-2))
is not of type
  ARRAY.
   [Condition of type TYPE-ERROR]

Swc 工作正常,因为它似乎返回了一个数组 - 但是 Sbc 没有 - 我用小型和巨大的(wc 13000 65000 627677)平面文件测试了Sbc,它在调用时返回了一个数组SLIME,但是在这种情况下它不起作用。 let* 表达式似乎写得对 - 我不确定我在这里做错了什么。

【问题讨论】:

  • 所以你认为引号字符可以是符号的字符?
  • 啊,谢谢。我不知道符号的字符限制。现在可以使用了。

标签: arrays lisp common-lisp let


【解决方案1】:

单引号字符' 是Common Lisp 中的终止宏字符。请参阅Figure 2-7 in the Hyperspec

如果你想在一个符号中使用这个字符,你必须用反斜杠或一对竖线来引用它:

CL-USER 65 > '(quote-at-the-end-\' |QUOTE-AT-THE-END-'| quote-at-the-end-|'|)
(QUOTE-AT-THE-END-\' QUOTE-AT-THE-END-\' QUOTE-AT-THE-END-\')

【讨论】:

    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 2011-05-08
    • 2021-02-25
    • 2016-02-14
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多