首页 > 解决方案 > 创建一个返回列表的函数,该列表包含列表的所有其他值

问题描述

(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)作为一个原子,而在其他情况下,我在它能够区分的列表上使用递归。

标签: lispcommon-lisp

解决方案


您的代码无效,因为它调用了一些未定义的函数f5。如果我替换f5f6并调用(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))


推荐阅读