我正在尝试写一个递归回文函数。代码使用两个函数如下:
(设置(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))))
)
)
(a b c d))
(defun palindrome (l)
(cond
( (null l)
nil
)
(T
(append str(append (palindrome (cdr l)) (list (car l))) )
)
)
)
但是,我正在尝试将它组合成一个函数:
{{1}}
返回(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)**在反转时不重复最后一个字符。
我知道有更简单的方法可以做到这一点我们预定义的功能,但我试图挑战自己一点。但是我被困在这里,非常感谢帮助。
答案 0 :(得分:3)
这是一个递归的单函数回文:
(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:当只有一个元素时终止,并返回该元素。