【问题标题】:How to remove double parentheses and leave only the nested lists in lisp?如何删除双括号并仅在 lisp 中保留嵌套列表?
【发布时间】:2016-08-22 12:18:47
【问题描述】:

例如,从此转换:

((((7 8) (0 H 0))) (((11 12)))) 

到以下:

((7 8) (0 H 0) (11 12))

不是(7 8 0 H 0 11 12) !! 谢谢。

【问题讨论】:

标签: list lisp common-lisp nested-lists parentheses


【解决方案1】:
0: (MYSTERIOUS ((((7 8) (0 H 0))) (((11 12))) (((A B) (C D))) ((D E F))))
  1: (MAGIC (((7 8) (0 H 0))))
    2: (MAGIC ((7 8) (0 H 0)))
      3: (MAGIC (7 8))
      3: MAGIC returned ((7 8))
      3: (MAGIC (0 H 0))
      3: MAGIC returned ((0 H 0))
    2: MAGIC returned ((7 8) (0 H 0))
  1: MAGIC returned ((7 8) (0 H 0))
  1: (MAGIC (((11 12))))
    2: (MAGIC ((11 12)))
      3: (MAGIC (11 12))
      3: MAGIC returned ((11 12))
    2: MAGIC returned ((11 12))
  1: MAGIC returned ((11 12))
  1: (MAGIC (((A B) (C D))))
    2: (MAGIC ((A B) (C D)))
      3: (MAGIC (A B))
      3: MAGIC returned ((A B))
      3: (MAGIC (C D))
      3: MAGIC returned ((C D))
    2: MAGIC returned ((A B) (C D))
  1: MAGIC returned ((A B) (C D))
  1: (MAGIC ((D E F)))
    2: (MAGIC (D E F))
    2: MAGIC returned ((D E F))
  1: MAGIC returned ((D E F))
0: MYSTERIOUS returned ((7 8) (0 H 0) (11 12) (A B) (C D) (D E F))

【讨论】:

  • @Sylwester (flatten '((((7 8) (0 H 0))) (((11 12))))) 给出(7 8 0 H 0 11 12),这与(可能未指定)问题不同。
【解决方案2】:

如果嵌套级别是恒定的,就像在示例中一样,您可以简单地这样做:

CL-USER> (mapcan #'car '((((7 8) (0 H 0))) (((11 12)))))
((7 8) (0 H 0) (11 12))

【讨论】:

  • 您正在改变常量值。你无法保证会发生什么。
  • 我应该复制汽车吗? (mapcan (lambda (x) (copy (car x))) ...) 还是别的什么?
猜你喜欢
  • 2011-02-10
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 2023-02-06
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多