普通的 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))
我的问题是我可以编写一个矩阵+接受不同数量的参数而无需“应用”,或者以更好的方式吗?以 lisp 应有的方式?
关于矩阵*,有人能给我一些很棒的代码来接受矩阵*中的任意数量的参数吗?谢谢。
最佳答案
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))
上面创建了一个大小为 3x5 的二维数组,初始内容为 0。
关于matrix - 用普通的 lisp 写一个简单的矩阵类来练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11449657/