我想在lista特殊元素的每个元素之间粘贴。例如:
(EINFUEGEN '(A B C) '*);-> (A * B * C)
Run Code Online (Sandbox Code Playgroud)
我如何以最简单的方式实现它?
有趣的方式:
(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)是一个解构分别结合符号x和xs头部和每个列表的尾部被访问。这对于检查是否剩余元素很有必要。
collect <val>添加<val>到正在构建的隐式集合中
when <test> <clause><clause>仅在<test>满足时才执行LOOP子句。在这里,我测试列表中是否还有其他元素;在这种情况下,我还会收集星号。