>我正在尝试编写一个递归回文函数。该代码使用两个函数工作,如下所示: (第str
套(阿乙中丁))
(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 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))))))
也就是说,您必须为递归函数的终止添加一个新情况:当只有一个元素时也终止,并返回该元素。