在常见的lisp中编写一个简单的矩阵类用于练习

Bor*_*ris 3 lisp elisp common-lisp matrix

常见的lisp新手.编写lisp代码与编写c ++/java完全不同,正如我之前编写的那样.

我试图在常见的lisp中编写一个简单的矩阵类来进行练习.一些代码是这样的:

(defun make-matrix (row col)
  (make-list row :initial-element (make-list col :initial-element nil)))

(defun init-matrix (matrix init-value)
  (labels ((set-element-value (lst)
                              (if (and lst
                                       (listp lst))
                                  (mapcar #'set-element-value lst)
                                (setf lst init-value))))
    (set-element-value matrix)))

(defun matrix+ (&rest matrices)
  (apply #'mapcar (lambda (&rest rows)
                    (apply #'mapcar #'+ rows)) matrices))
Run Code Online (Sandbox Code Playgroud)

我的问题是我可以写一个矩阵+接受不同数量的参数而不用'apply',或者以更好的方式?在某种程度上,lisp应该是?

那么矩阵*怎么样,有人能告诉我一些很棒的代码接受矩阵*中的任意数量的参数吗?谢谢.

Rai*_*wig 5

Common Lisp有n维数组.我会用它们进行矩阵运算.

请参阅:MAKE-ARRAY,AREF,...

通常我也会编写一个二进制(采用两个参数)矩阵运算.然后使用REDUCE操作矩阵列表.

CL-USER > (make-array '(3 5) :initial-element 0)
#2A((0 0 0 0 0) (0 0 0 0 0) (0 0 0 0 0))
Run Code Online (Sandbox Code Playgroud)

上面创建一个大小为3x5的二维数组,其中0为初始内容.