如何编写递归函数并在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)))