2015-06-03 29 views
0

我將輸入N作爲lisp中二維矩陣的行數,其中每行最多可以包含5個元素。所以我這樣做。現在eachrow,因爲它可以具有任何數量之間0至5的元素所以,我提出一個sepearte數組來存儲2D矩陣的每一行的大小,並增加它每當我在它在lisp中打印第i行第j列值

(setq myMatrix (make-array (list N 5))) 

(setq sizeArray (make-list N:initial-element 0)) 

推動任何元件現在,當我需要添加元素到任何行我輸入,而該行有最大元素或用戶自己退出輸入更多的元素在該行。將元素添加到第i行我做這樣的事情:

(setf (aref myMatrix i (nth i sizeArray)) "Hi") 
// Hi is just for example here 
(setf (nth i sizeArray) (+ 1 (nth i sizeArray))) 

現在我想打印表示第i這個myMatrix的像這樣的一行:

Item 1 : myMatrix[i][0] 
Item 2 : myMatrix[i][1]..and so on 

在直接的方式,我想第j值第i行。我們如何才能在lisp中得到這個?

+0

首先,如果在一個行元素的數量可以是不同的行不同,它不是一個矩陣。您可能需要可擴展向量或列表向量(5不是那麼大的數字,因此您可以使用列表,實際上它可以比基於向量的方法更快)。 – Mark

回答

1

因爲你正在使用列表的數組怎麼樣:

所有的
(defun element-of-matrix (matrix i j) 
    (nth j (aref matrix i))) 
+0

了錯誤 AREF:得了1個標,但 #2A(( 「A」 「B」 「C」 NIL NIL) ( 「d」, 「E」 NIL NIL NIL)) 有秩2 – ms8

+0

那麼你使用數組的數組,而不是列出的數組: 你只需要: (AREF矩陣IJ) 例如 >(SETF一(使陣列「(2 2))) #2A((NIL NIL) (NIL NIL)) >(setf(aref a 1 1)「hello」) 「hello」 >(aref a 1) 「hello」 – Adax

+0

這不是數組的數組,而是二維數組。 – Svante

相關問題