LISP 复制函数

标签 lisp common-lisp

我正在尝试创建一个函数,根据所需的副本数创建用户输入的任何列表的副本。

用户:(复制'(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/

相关文章:

LISP:在 Ubuntu 中运行程序

lisp - 与子列表的混淆

clojure - Clojure 中的并行绑定(bind)是什么意思

lisp - 在 Lisp 中,为什么我们需要使用列表函数来返回列表?

lisp - 使用 SBCL FFI 传递和接收字符串

Lisp - 素数

perl - Common Lisp是否具有最快的PCRE实现?

list - 为什么我的 lisp 函数给我这个输出?

lisp - 为什么 LET 在我的 quine 中不能与 EVAL 一起玩?

validation - LISP - 检查罗马数字转换器的有效罗马数字