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

ただし、この関数を 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正常に動作しますが、配列を返すようですが、そうではありません-小さくて巨大な(wc 13000 65000 627677)フラットファイルでSbcテストSbcし、SLIMEで呼び出されたときに配列を返しましたが、この場合は機能しません. 式はlet*正しく書かれているようです。ここで何が間違っているのかわかりません。

4

1 に答える 1

2

一重引用符'は、CommonLispの終了マクロ文字です。Hyperspecの図2-7を参照してください。

この文字を記号で使用する場合は、円記号または縦棒のペアで引用する必要があります。

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-\')
于 2013-02-04T18:22:36.560 に答える