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

Lisp 如何在列表的所有元素之间粘贴元素?,lisp,common-lisp,Lisp,Common Lisp,我想在列表的每个元素之间粘贴一个特殊元素。例如: (EINFUEGEN '(A B C) '*);-> (A * B * C) 如何以最简单的方式实现这一点?有趣的方式: (cdr (mapcan #'list '#1=(* . #1#) '(a b c))) 体面的方式: (loop for (x . xs) on '(a b c) collect x when xs collect '*) for on迭代所有子列表,这意味着var将绑定到(a b c),然

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

(EINFUEGEN '(A B C) '*);-> (A * B * C)
如何以最简单的方式实现这一点?

有趣的方式:

(cdr (mapcan #'list '#1=(* . #1#) '(a b c)))
体面的方式:

(loop
   for (x . xs) on '(a b c) 
   collect x
   when xs collect '*)
  • for on
    迭代所有子列表,这意味着
    var
    将绑定到
    (a b c)
    ,然后
    (b c)
    然后
    (c)
    最后
    ()

  • (x.xs)
    是一种分解符号,分别将
    x
    xs
    绑定到所访问的每个列表的头部和尾部。这里有必要检查是否有剩余的元素

  • collect
    添加到正在生成的隐式集合中

  • when
    仅在满足
    时执行循环子句
    。在这里,我测试列表中是否有更多的元素;在这种情况下,我还收集星号

    • 有趣的方式:

      (cdr (mapcan #'list '#1=(* . #1#) '(a b c)))
      
      体面的方式:

      (loop
         for (x . xs) on '(a b c) 
         collect x
         when xs collect '*)
      
      • for on
        迭代所有子列表,这意味着
        var
        将绑定到
        (a b c)
        ,然后
        (b c)
        然后
        (c)
        最后
        ()

      • (x.xs)
        是一种分解符号,分别将
        x
        xs
        绑定到所访问的每个列表的头部和尾部。这里有必要检查是否有剩余的元素

      • collect
        添加到正在生成的隐式集合中

      • when
        仅在满足
        时执行循环子句
        。在这里,我测试列表中是否有更多的元素;在这种情况下,我还收集星号


      本周你帮了我三次忙,有没有办法让我直接与你聊天^^真是绝妙的解决方案!你能给我解释一下这个循环的原理吗?(1)我不怎么用,但我听说这里有个聊天室。我倾向于在我有时间的时候回答问题(或者当我拖延的时候:-/),所以通常我更擅长异步回答。你有急事要问吗?(2) Loop:我无法更好地解释它,因为整本书都很棒,可以免费在线阅读。本周你帮了我三次忙,有没有办法让我直接与你聊天^^真是绝妙的解决方案!你能给我解释一下这个循环的原理吗?(1)我不怎么用,但我听说这里有个聊天室。我倾向于在我有时间的时候回答问题(或者当我拖延的时候:-/),所以通常我更擅长异步回答。你有急事要问吗?(2) Loop:我无法更好地解释它,因为整本书都很棒,可以免费在线阅读。