递归寻找回文

Recursively finding palindromes

所以我试图递归地查找回文,我生成了一个巨大的嵌套列表,看起来像这样 '((n n n)(n n n)(n n n)) 其中 n 是使用函数的 c 的数字:

(defun double-lst (lst1 lst2)
  (mapcar #'(lambda (n)
               (multiply-lst n lst2))
          lst1))

这个列表绝对是巨大的。我正在尝试编写一个递归函数,使用模板搜索列表中的汽车和 cdr:

    (DEFUN func (X)
     (COND (end-test-1 end-value-1)
           (end-test-2 end-value-2)
           (T (combiner (func (CAR X))
                        (func (CDR X))))))

但我似乎无法获得我的版本或我尝试过的任何东西。 我已经尝试过类似的方法:

(defun find-palindrome (lst)
  (cond ((equal lst (reverse lst)) lst)
        (t (or (find-palindrome (car lst))
               (find-palindrome (cdr lst))))))

函数 find-palindrome 被传递(反向 lst),因此它首先从最高值开始工作 returning 第一个回文,但我不知道如何让递归函数执行它东西。 我真的很感激关于如何编写 car/cdr 递归的深入解释。谢谢 :) 编辑: 我的蹩脚查找回文 return 是这样的:

    CL-USER> (find-palindrome '((1 2 3 4)(13 4 51 3) (1 2 4 9009)))
; Evaluation aborted on #<TYPE-ERROR expected-type: SEQUENCE datum: 1>.

我希望它 return (9009)。

您的模板不适用于此问题; (car lst) 不一定是列表,但 find-palindrome 的参数应该是。或者至少在将 (car lst) 传递给 find-palindrome.

之前,您需要确定它是一个列表

同样,你好像想看看一个数的数字是不是回文; reverse 是为了反转列表的元素,而不是数字的数字。