gpt4 book ai didi

common-lisp - 将循环列表复制到固定长度列表

转载 作者:行者123 更新时间:2023-12-04 03:26:38 24 4
gpt4 key购买 nike

我将图形坐标存储在一个循环列表中:

(defun make-circular-list (size &key initial-element)
(let ((list (make-list size :initial-element initial-element)))
(nconc list list)))

(defvar *coordinates* (make-circular-list 1024 :initial-element 0.0))

现在,无论何时必须设置新坐标,都可以轻松更新 *coordinates*

但是,我有一个库函数,它采用一系列坐标在图形上绘制线条。当然这个函数不适用于循环结构,所以我想制作一个固定长度的副本。列表或数组都可以。

到目前为止,我已经尝试过使用 :initial-contents 关键字的 subseqmake-array,但都失败了。 loopdotimes 确实有效,但我希望避免迭代列表的每个元素。

是否有可能有效地复制这个循环结构或本着置换数组的精神制作一个固定长度的数组?

最佳答案

使用 LOOP 没有错。

(loop for c in *coordinates* repeat 1024 collect c)

顺便说一句,有时将循环列表隐藏在 CLOS 对象后面可能会很有用。

(defclass circular-list ()
((list)
(size)
(first-element)
(last-element)))

等等……

这样您就可以提供一些 CLOS 方法来访问和更改它(创建、添加、复制、删除、、as-list、...)。您还可以使用 PRINT-OBJECT 的方法控制它的打印。

关于common-lisp - 将循环列表复制到固定长度列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14501134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com