递归发现回文

时间:2016-01-22 19:39:35

标签: recursion common-lisp

所以我试图以递归方式找到回文,我已经生成了一个巨大的嵌套列表,看起来像'((n n n)(n n n)(n n n))其中n是使用函数的数字ofc:

(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),因此它从最高值开始工作,首先返回第一个回文,但我不知道如何获得递归函数来完成它的东西。 我真的很感激如何编写car / cdr递归的深入解释。谢谢 :) 编辑: 我糟糕的find-palindrome回复了这个:

    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>.

我希望它能够回归(9009)。

1 个答案:

答案 0 :(得分:1)

您的模板不适用于此问题; (car lst)不一定是列表,但find-palindrome的参数应该是。(car lst)。或者至少您需要确保find-palindrome是一个列表,然后再将其传递给reverse

同样,你似乎想看看一个数字的数字是否是回文; {{1}}旨在反转列表的元素,而不是数字的数字。