【问题标题】:How can i get (function '(a b a a b c)) => ((a a a) (b b))? [closed]我怎样才能得到(函数'(a b a b c))=>((a a a)(b b))? [关闭]
【发布时间】:2015-10-01 16:01:03
【问题描述】:

我正在学习常见的 lisp 教程,但我不熟悉它。

我怎样才能得到以下结果?

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

【问题讨论】:

  • SO 不是免费的编码服务,你必须自己尝试解决它,这是学习如何编程的唯一途径。如果您无法使其正常工作,请发布您的尝试,我们会告诉您哪里出了问题以及如何解决。

标签: recursion common-lisp


【解决方案1】:

这很容易。你有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) 作为练习。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-25
    • 2021-11-28
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多