2017-08-31 42 views
0

我想知道f(X)是否適用於所有的X在一些非常大的列表L。 現在我有:Foldl for short with short circuiting

lists:foldl(fun(X, Last) -> f(X) andalso Last end, true, L) 

問題是,我不認爲這短路。即使它對於L中的第一個元素是錯誤的,它仍會始終保持並與false一同繼續。

是否有一個標誌foldl這樣會短路或我可以使用另一個功能?

我現在看到有一個叫all的函數,但是它沒有說它是否短路。

+0

'all'不短路。它只需要1個錯誤來計算「全部」的答案 - 不需要繼續評估超出該範圍 – naomik

回答

5

lists:foldl/3沒有任何方法來停止摺疊並立即返回值。您可以使用lists:all/2這一點,這將停止處理該列表的其餘部分,如果該功能列表中的任何項目通過了回報false

lists:all(fun(X) -> f(X) end, L) 

% or 

lists:all(fun f/1, L) 
+0

也許提到「所有」的對應方,「任何」 – naomik