【发布时间】:2019-02-23 19:20:15
【问题描述】:
我正在尝试在 Common Lisp 中交换二维数组中的两行。我找到了使用aref 的方法。这是一种破坏性的做法,我喜欢让它更具功能性。有人有更好的主意吗?
(defun swap-rows (matrix r1 r2)
"Returns a modified matrix with two swapped rows"
(loop for i upto (1- (array-dimension matrix 1))
do (rotatef (aref copy r1 i) (aref copy r2 i))))
我一直在考虑制作原始数组的副本,但它仍然会更改原始数组。这是我的第二次尝试:
(defun swap-rows (matrix r1 r2)
"Returns a modified matrix with two swapped rows"
(let ((copy matrix))
(loop for i upto (1- (array-dimension matrix 1))
do (rotatef (aref copy r1 i) (aref copy r2 i))
finally (return copy))))
我还看过其他一些东西,但复制数组的一些方法似乎有点overly complicated。提前感谢您的任何建议。
附:我不想使用任何外部库(非常抱歉推荐 Alexandria 的人)。
【问题讨论】:
标签: arrays multidimensional-array functional-programming common-lisp