作者:寒灵 | 来源:互联网 | 2023-05-20 07:30
Emacs lisp有reduce-vec.在没有使用循环或重新发明轮子的情况下,在普通的lisp中执行此操作的正确方法是什么?
1> malisper..:
您应该可以使用以下内容.它适用于任何维度的数组.
(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返回数组中元素的总数,而:displacement-to关键字参数使新数组与传入的数组共享元素(即使它们具有不同的维度).
不是一个好的评论,在你的问题中没有指明禁止这种技术.你也应该看看:displa-to,它不复制元素.与您的解决方案不同,它也适用于n维