LISP - 递归回文



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

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

最新更新