LISP-- 递归回文

LISP - recursive palindrome

我正在尝试编写递归回文函数。该代码使用两个函数,如下所示: (设置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))) )
        )
    )
)

这 returns (A B C D A B C D A B C D A B C D D C B A)

我希望它到达的位置 return (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))))))

也就是说,你必须为递归函数的终止添加一个新的案例:当只有一个元素时也终止,并且return那个元素。