gpt4 book ai didi

lisp - Common Lisp 中的循环列表

转载 作者:太空宇宙 更新时间:2023-11-03 18:34:37 25 4
gpt4 key购买 nike

我正在使用可视化编程环境进行基于 CL 的音乐创作。我正在尝试创建一个函数,当给出 3 个元素 (1 2 3) 时将返回 1、2、3、1、2、3 等,每次评估时返回一个数字。 Common Lisp a Gentle Introduction 一书简要提到可以使用锐等号表示法创建循环列表,但没有详细说明如何使用它们。请记住,我可以使用专门为此设计的对象在程序中插入实际的 Lisp 代码。

最佳答案

CL-USER 3 > (defun circular (items)
(setf (cdr (last items)) items)
items)
CIRCULAR

CL-USER 4 > (setf *print-circle* t)
T

CL-USER 5 > (circular (list 1 2 3))
#1=(1 2 3 . #1#)

例子:

CL-USER 16 > (setf c1 (circular (list 1 2 3)))
#1=(1 2 3 . #1#)

CL-USER 17 > (pop c1)
1

CL-USER 18 > (pop c1)
2

CL-USER 19 > (pop c1)
3

CL-USER 20 > (pop c1)
1

还有:

CL-USER 6 > '#1=(1 2 3 . #1#)
#1=(1 2 3 . #1#)

添加了一些 CLOS:

(defclass circular ()
((items :initarg :items)))

(defmethod initialize-instance :after ((c circular) &rest initargs)
(setf (slot-value c 'items) (circular (slot-value c 'items))))

(defmethod next-item ((c circular))
(prog1 (first (slot-value c 'items))
(setf (slot-value c 'items)
(rest (slot-value c 'items)))))

CL-USER 7 > (setf circ1 (make-instance 'circular :items (list 1 2 3)))
#<CIRCULAR 40200017CB>

CL-USER 8 > (next-item circ1)
1

CL-USER 9 > (next-item circ1)
2

CL-USER 10 > (next-item circ1)
3

CL-USER 11 > (next-item circ1)
1

CL-USER 12 > (next-item circ1)
2

关于lisp - Common Lisp 中的循环列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16678371/

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