是否可以在lambda函数内部使用return
我有一个列表,我想删除其中的一个列表。因此,如果不是lambda表达式,我将使用remove。但我可能不需要遍历列表中的所有元素来确定是否应该删除它,因为需要从列表中返回一个结论。但是如何在匿名lambda函数中应用一个呢是否可以在lambda函数内部使用return,lambda,common-lisp,Lambda,Common Lisp,我有一个列表,我想删除其中的一个列表。因此,如果不是lambda表达式,我将使用remove。但我可能不需要遍历列表中的所有元素来确定是否应该删除它,因为需要从列表中返回一个结论。但是如何在匿名lambda函数中应用一个呢 (defvar *listlist* (list (list 1 2 3) (list 3 4 5) (list 5 6 7) (list 7 8 9))) (remove-if-not #'(lambda (arg) (dolist
(defvar *listlist* (list (list 1 2 3) (list 3 4 5) (list 5 6 7) (list 7 8 9)))
(remove-if-not #'(lambda (arg)
(dolist (x arg)
(when (= x 3)
(return-from lambda t)))
nil)
*listlist*)
另一件事,困扰我的是可能使用mapcar而不是dolist,但我的问题变得更糟,因为我现在必须从两个lambda函数返回。
dolist
建立了一个隐式块,因此可以使用返回。阅读更多。另外,您可以将dolist
包装在显式块中,这样您就可以使用return from
dolist
建立一个隐式块,这样您就可以使用return
。阅读更多。此外,您可以将dolist
包装在显式block
中,这样您就可以使用return from
您也可以使用Graham's(而不是lambda;只需在前面添加'a'),以防您恰好从以下位置返回dolist块:
(remove-if-not
(alambda (arg)
(dolist (x arg)
(when (= x 3)
(return-from self t))
nil))
*listlist*)
这适用于一般情况,在这种情况下,您需要编写一个lambda函数,然后碰巧需要命名lambda,以便可以从中返回。此时,只需在lambda中添加一个“a”,然后从self返回。如果您没有要返回的dolist块,您也可以使用Graham's(而不是lambda;只需在前面添加“a”):
(remove-if-not
(alambda (arg)
(dolist (x arg)
(when (= x 3)
(return-from self t))
nil))
*listlist*)
这适用于一般情况,在这种情况下,您需要编写一个lambda函数,然后碰巧需要命名lambda,以便可以从中返回。此时,只需在lambda中添加一个“a”,然后从self返回。块提示是一个完美的匹配,谢谢我在lambda函数的孔形式上包装了一个块。块提示是一个完美的匹配,谢谢我在lambda函数的孔形式上包装了一个块。如果在外层lambda上使用alambda,在内层使用lambda,你可以从自我回归;检查内部的mapc如果在外部lambda上使用alambda,在内部使用lambda,则可以从self返回;签出内部数据库的mapc