Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LISP复制函数_Lisp_Common Lisp - Fatal编程技术网

LISP复制函数

LISP复制函数,lisp,common-lisp,Lisp,Common Lisp,我正在尝试创建一个函数,该函数创建用户放入的任何列表的副本,该列表的副本数为所需的副本数 使用者:(复制(A)’(7)) 输出:(A) 我试图设置一个计数器,并通过递减计数器在当前列表中创建一个新列表。到目前为止,计数器是伪代码。 这就是我想弄清楚的柜台 (defun count (y) (let ((a y)) (- a 1))) 我得到的错误是,我在y中输入的任何参数都不是数字。虽然我可以理解为什么第一个参数是列表,但第二个参数必须是数字。一个非常简单的实现可能如下所示: (d

我正在尝试创建一个函数,该函数创建用户放入的任何列表的副本,该列表的副本数为所需的副本数

使用者:(复制(A)’(7)) 输出:(A)

我试图设置一个计数器,并通过递减计数器在当前列表中创建一个新列表。到目前为止,计数器是伪代码。
这就是我想弄清楚的柜台

(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
和对象复制的常见注意事项适用。

我建议将列表作为
&rest
参数传递,并使用
循环

(defun repeat (n &rest items)
  (loop repeat n append items))
试验


出于好奇,当一个参数只是一个元素,而另一个只是一个数字时,为什么要以列表的形式传递参数呢?两者都可以吗?假设一个用户想要:user:(abcde)并且他们想要每个元素被复制这么多次(10511)。所以输出应该是(A B B C D E)。当然是。:)你只需要在你的问题中明确这个要求。你的第一个例子不一定假设这种情况。是的,我对lisp不太熟悉,我发现处理新材料的最好方法是一次分解问题的一个方面。我讨厌引入一个完整的问题并得到一个我无法理解的复杂答案=p第二个问题是否应该类似于数组维度?(但我怀疑这是目的。)lisp如何定义什么是int和什么是字符串?我使用java talk,因为我对lisp非常陌生。
(defun repeat (n &rest items)
  (loop repeat n append items))
CL-USER> (repeat 10 0 1 2)
(0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2)