gpt4 book ai didi

recursion - LISP-- 递归回文

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:04 25 4
gpt4 key购买 nike

我正在尝试编写递归回文函数。该代码使用两个函数,如下所示: (设置 str(a b c d))

(defun reverseString (l)
(cond
( (null l) nil)
(T (append (reverseString (cdr l)) (list (car l))))
)
)

(defun palindrome (l)
(cond
( (null l) nil)
(T (append l(reverseString (cdr l)) (list (car l))))
)
)

但是,我试图将它组合成一个函数:

(defun palindrome (l)
(cond
( (null l)
nil
)
(T
(append str(append (palindrome (cdr l)) (list (car l))) )
)
)
)

返回 (A B C D A B C D A B C D A B C D D C B A)

我希望它返回 (a b c d d c b a) 然后最终返回 (a b c d c b a) **在反转时不重复最后一个字符。

我知道有更简单的方法可以做到这一点我们预定义的功能,但我想挑战一下自己。但是我被困在这里,非常感谢您的帮助。

最佳答案

这是一个递归的单函数回文:

(defun palindrome(l)
(cond ((null l) nil)
(t (append (list (car l)) (palindrome (cdr l)) (list (car l))))))

递归的结构是这样的:对列表的其余部分进行回文,并将列表的第一个元素放在开头和结尾。

如果你只想拥有一次中心元素,这里有一个替代版本:

(defun palindrome(l)
(cond ((null l) nil)
((null (cdr l)) (list (car l)))
(t (append (list (car l)) (palindrome (cdr l)) (list (car l))))))

也就是说,您必须为递归函数的终止添加一个新的 case:当只有一个元素时也终止,并返回该元素。

关于recursion - LISP-- 递归回文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30965011/

25 4 0