如何在列表的所有元素之间粘贴元素?

Chr*_*ner 1 lisp common-lisp

我想在lista特殊元素的每个元素之间粘贴。例如:

(EINFUEGEN '(A B C) '*);-> (A * B * C)
Run Code Online (Sandbox Code Playgroud)

我如何以最简单的方式实现它?

cor*_*ump 5

有趣的方式:

(cdr (mapcan #'list '#1=(* . #1#) '(a b c)))
Run Code Online (Sandbox Code Playgroud)

可敬的方式:

(loop
   for (x . xs) on '(a b c) 
   collect x
   when xs collect '*)
Run Code Online (Sandbox Code Playgroud)
  • for <var> on <list>遍历所有子列表,含义var将被绑定(a b c),然后(b c)又是(c)最终()

  • (x . xs)是一个解构分别结合符号xxs头部和每个列表的尾部被访问。这对于检查是否剩余元素很有必要。

  • collect <val>添加<val>到正在构建的隐式集合中

  • when <test> <clause><clause>仅在<test>满足时才执行LOOP子句。在这里,我测试列表中是否还有其他元素;在这种情况下,我还会收集星号。