【问题标题】:how to remove parenthesis from sublists within a list?如何从列表中的子列表中删除括号?
【发布时间】:2020-06-24 08:19:53
【问题描述】:
(defun ppl (list)
  (loop for x in list
    collect (cons x '(ppl))))
(ppl '(1 2 3))
=> ((1 ppl) (2 ppl) (3 ppl))

虽然还在ppl里面,但是如何去掉括号让结果变成

=> (1 ppl 2 ppl 3 ppl)

我了解我的代码从根本上创建了一个子列表列表。可以使用一些帮助来扁平化列表。也许如果我能以某种方式获得收集返回的列表?

【问题讨论】:

  • 这与“删除括号”无关。括号只是列表的外部文本表示中的一个东西。该操作称为“展平”。它接受一个嵌套列表并返回一个带有平面列表的新列表,其中包含原始列表的所有原子。

标签: list common-lisp flatten


【解决方案1】:

使用nconc instead of collect:

(defun ppl (list)
  (loop for x in list
    nconc (list x 'ppl)))
(ppl '(1 2 3))
==> (1 PPL 2 PPL 3 PPL)

请注意,我将(cons x '(ppl)) 替换为(list x 'ppl)),以避免可能重复使用文字(ppl),而nconc 可能会变成circular lists。如果您坚持在代码中使用quoted literals(坏主意!),请使用append 而不是nconc

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多