Я сталкиваюсь с той же проблемой и решаю ее следующим образом:
-module(foreach_until).
-export([foreach_until/3]).
foreach_until(Action, L, Judge) ->
lists:reverse(foreach_until(Action, L, Judge, []))
.
foreach_until(_, [], _, Result) ->
Result
;
foreach_until(Action, [H | T], Judge, Result) ->
case Judge(H) of
true -> Result;
false -> foreach_until(Action, T, Judge, [Action(H) | Result])
end
.
Ниже приведен пример, объясняющий, как использовать:
60> foreach_until:foreach_until(fun(X) -> X*X end, [1,2,3,4], fun(X)-> X >= 3 end).
[1,4]