matrix - 用普通的 lisp 写一个简单的矩阵类来练习

标签 matrix lisp elisp common-lisp

普通的 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-ARRAYAREF,...

通常我还会编写一个二进制(采用两个参数)矩阵运算。然后使用 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/

相关文章:

recursion - SICP - 递归或迭代过程?

emacs - 将 Emacs AUCTeX 与 Sumatra PDF 同步

matrix - 填充这个矩阵的简单方法?

list - 方案:列表的CAR和CDR

algorithm - 并行矩阵乘积

java - 列出源依赖项

emacs - 可用于 emacs 的交互式拼写检查程序

Emacs -- 创建/删除一个 `buffer-local` 重复空闲计时器

c# - XNA - 矩阵等效于 SpriteBatch.Draw 转换?

使用BLAS对整数类型进行矩阵乘法