我希望能够在循环内收集多个列表。
我知道这可以在没有循环的情况下完成,但是我想知道这是否也可以用循环来完成。我想要这样的东西:
(loop for var in list
(if (cond1 var)
(if (cond2 var)
collect into list1
collect into list2))
finally (list list1 list2))
我收到的错误是LOOP keyword is expected
,我想收集应该在when
or a loop
。有什么办法可以解决吗?
不管你信不信你都有括号太多. loop
有自己的小子语言,与 Common Lisp s 表达式有很大不同。
(loop :for var :in list
:when (cond1 var)
:if (cond2 var)
:collect var :into list1
:else
:collect var :into list2
:end
:end
:finally (return (list list1 list2)))
另外我指定要做什么:collect
and :finally
只是评估所以你需要使用(return ...)
否则你可以期待nil
.
我使用关键字loop
关键字以将它们与其他符号区分开来。这只是风格。缩进当然会被忽略,只是为了可读性,但是:end
不是。然而在这种情况下,两者:end
关键字是多余的,因为loop
没有它们就可以正确解析。
我绝不是一个loop
wiz ..每次我得到一些稍微复杂的东西时我都会使用口齿不清之地 http://www.landoflisp.com/的元素周期表或黑带环 http://www.gigamonkeys.com/book/loop-for-black-belts.html,一章来自实用 Common Lisp http://www.gigamonkeys.com/book/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)