我怎样才能得到(函数'(a b a b c))=>((a a a)(b b))?

How can i get (function '(a b a a b c)) => ((a a a) (b b))?

我正在研究common lisp教程,但我不熟悉它。

我怎样才能得到下面的结果?

(function '(a b a a b c)) => ((a a a) (b b))

这很容易。您有 remove-ifremove-if-not。他们是这样工作的:

(remove-if-not (lambda (x) (eq x 'a)) '(a b a a b c)) ; ==> (a a a)
(remove-if (lambda (x) (eq x 'a)) '(a b a a b c)) ; ==> (b b c)

现在,如果您有一个参数但不是 nil,您可以使用上面的方法生成结果的第一个元素以及要传递给递归的列表。

一个典型的递归函数:

(defun group (list)
  (if (endp list)
      nil
      (cons <??> (group <??>))))

有更有效的方法可以做到这一点,您可能想要制作自己的函数而不是依赖 remove-if(-not) 作为练习。