2013-02-04 38 views
0

我创建了应该有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)) 

然而,当我煤泥这个功能我得到的错误:

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 doesn't-我测试Sbc与小和巨大(wc 13000 65000 627677)平面文件,它返回一个数组时,在SLIME中调用,但它不工作在此CA SE。 let*表达式似乎写得很对 - 我不确定我在这里做错了什么。

+2

让你觉得一个引号字符可以是符号的字符? –

+0

啊,谢谢。我不知道符号上的字符限制。它现在有效。 – category

回答

2

单引号字符'是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-\')