如何编写递归函数并在Lisp中打印

如何编写递归函数并在Lisp中打印,lisp,common-lisp,Lisp,Common Lisp,我有一个函数,可以获取任何列表,然后像这样打印它(例如): 输入列表:(A B C) 输出:(A B C)(A)(B)(C) 这是一个原始列表,后面是它自己的列表中的每个元素。该函数应作为递归函数编写 我有以下伪代码,无法正确获取,无法转换为递归: Assuming input (A B C) Function input (list) Cons newlist '(list) //newlist = (A B C) newlist append (car list) //car

我有一个函数,可以获取任何列表,然后像这样打印它(例如):

输入列表:
(A B C)

输出:
(A B C)(A)(B)(C)

这是一个原始列表,后面是它自己的列表中的每个元素。该函数应作为递归函数编写

我有以下伪代码,无法正确获取,无法转换为递归:

Assuming input (A B C)

Function input (list)

  Cons newlist '(list) //newlist = (A B C)

  newlist append (car list) //car returns A

  pop list//remove firstElement

  newlist append (car list)//car returns B

  Pop list

  newlist append (car list)//car returns C

  pop list

  Print newlist.

这里的问题是,使用Append,我将得到(abc)。有没有其他方法可以将其分为相应的括号,也可以递归地进行划分?

这是您的逃生梭,Sigourney:)

(使用老式GNU common LISP windows版本进行测试-我不得不手动重新键入会话,因为在编译时,复制粘贴似乎仍然是一个科幻概念)


你可以这样做:

(defun f (lst)
  (labels 
      ((g (lst)
         (when lst
           (cons (list (car lst)) (g (cdr lst))))))
    (cons lst (g lst))))
其中,外部函数
f
使用内部递归函数
g
并在初始列表前面加上前缀

? (f '(A B C))
((A B C) (A) (B) (C))
基本上,
g
mapcar
相同,因此,如果不必递归执行,可以执行以下操作:

(defun f (lst)
  (cons lst (mapcar #'list lst)))

@kuroineko这有帮助吗?你想要什么输出<代码>(A B C(A)(B)(C))或
((A B C)(A)(B)(C))
?@lepetitp除了第二个,请记住在以后的问题中添加
通用lisp
标记。
(defun f (lst)
  (cons lst (mapcar #'list lst)))