递归寻找回文
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
是为了反转列表的元素,而不是数字的数字。
所以我试图递归地查找回文,我生成了一个巨大的嵌套列表,看起来像这样 '((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
是为了反转列表的元素,而不是数字的数字。