lisp - 创建一个返回列表的函数,该列表包含列表的所有其他值
问题描述
(defun f6(x)
(cond
((null (cadr x)) '())
(T (cons (car x) (f6 (cdr (cadr x)))))
)
)
;Example input:
;(c (a b) d (x y) (a) b))
;Expected output:
;(c d (a))
;Current ouput:
;(C . B)
在创建这个函数时,我不能使用内置循环,它必须是递归的,我也不能使用 setQ 或任何其他函数。所以我需要使用 car cdr 和 cadr。我真的不知道句号来自哪里以及为什么它的阅读列表(ab)作为一个原子,而在其他情况下,我在它能够区分的列表上使用递归。
解决方案
您的代码无效,因为它调用了一些未定义的函数f5
。如果我替换f5
为f6
并调用(f6 '(c (a b) d (x y) (a) b))
,它会返回(C)
。因此,您需要使用不同的访问器组合。
(defun every-other (lst)
(if (null lst) '()
(cons (car lst)
(every-other (cddr lst)))))
(every-other '(c (a b) d (x y) (a) b))
(cddr lst)
是(cdr (cdr lst))
。