热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在常见的lisp中减少/折叠2d数组的最佳方法

如何解决《在常见的lisp中减少/折叠2d数组的最佳方法》经验,为你挑选了1个好方法。

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维
推荐阅读
author-avatar
寒灵
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有