在常见的 lisp 中 reduce/fold 超过二维数组的最佳方法
Best way to reduce/fold over 2d array in common lisp
Emacs lisp 有 reduce-vec。在不使用循环或重新发明轮子的情况下,在普通 lisp 中执行此操作的正确方法是什么?
您应该可以使用如下所示的内容。它适用于任何维度的数组。
(defun reduce-multidimensional-array (fn arr &rest args)
(apply #'reduce
fn
(make-array (array-total-size arr) :displaced-to arr)
args))
简而言之,这是通过创建一个与传入的数组共享元素的一维数组来实现的。由于 reduce 在一维数组上工作,因此可以减少新数组。
函数 array-total-size returns 数组中元素的总数和 :displaced-to 关键字参数导致新数组与传入的数组共享元素(即使它们有不同的维度)。
Emacs lisp 有 reduce-vec。在不使用循环或重新发明轮子的情况下,在普通 lisp 中执行此操作的正确方法是什么?
您应该可以使用如下所示的内容。它适用于任何维度的数组。
(defun reduce-multidimensional-array (fn arr &rest args)
(apply #'reduce
fn
(make-array (array-total-size arr) :displaced-to arr)
args))
简而言之,这是通过创建一个与传入的数组共享元素的一维数组来实现的。由于 reduce 在一维数组上工作,因此可以减少新数组。
函数 array-total-size returns 数组中元素的总数和 :displaced-to 关键字参数导致新数组与传入的数组共享元素(即使它们有不同的维度)。