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