我正在尝试创建一个函数,根据所需的副本数创建用户输入的任何列表的副本。
用户:(复制'(A)'(7)) 输出:(A A A A A A A)
(defun copy (x y)
(cond ((-1 counter)
nil)
(T
(list (cons (car x) (cdr x)))
copy
(cdr x)))
我正在尝试设置一个计数器,并通过递减计数器在当前列表中创建一个新列表。到目前为止,计数器是伪代码。
这是我想弄清楚的计数器。
(defun count (y)
(let ((a y))
(- a 1)))
我得到的错误是无论我放入 y
中的什么都不是数字。
最佳答案
虽然我能理解为什么第一个参数是列表,但第二个参数必须是数字。一个非常简单的实现可能如下所示:
(defun copy (lst count)
(when (> count 0)
(append (copy-list lst) (copy lst (1- count)))))
测试:
CL-USER> (copy '(A) 7)
(A A A A A A A)
CL-USER> (copy '(A B C) 7)
(A B C A B C A B C A B C A B C A B C A B C)
有关使用 append
和对象复制的常见注意事项适用。
关于LISP 复制函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35902389/