是否可以在lambda函数内部使用return

是否可以在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

我有一个列表,我想删除其中的一个列表。因此,如果不是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 (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