Re: Breaking out of doseq

2013-11-27 Thread Cedric Greevey
What about (first (filter identity (map (fn [[rx f]] (if (matches? rx input) (f input))) regexes))), where regexes is something like [[regex1 f1] [regex2 f2] ...] and input is some string. As long as none of the fs returns nil, this should work, using lazy sequence behavior to stop at the first mat

Re: Breaking out of doseq

2013-11-27 Thread Phillip Lord
I think you want to use "some" instead -- you need a list of regexps anyway given that, as you say, the order is significant. Some can return the first match that hits. doseq is not good for this anyway, since doseq doesn't return anything. Phil Jonathon McKitrick writes: > To clarify what I'

Re: Breaking out of doseq

2013-11-27 Thread Michael Klishin
2013/11/27 Jonathon McKitrick > To clarify what I'm trying to do, I have a map of regexes, and after > iterating them, when one matches (the order of the regexes is significant) > I want exactly one result returned by applying the looked up function to > the string. After that regex matches, no

Re: Breaking out of doseq

2013-11-27 Thread Ambrose Bonnaire-Sergeant
reduced wraps a value in such a way that it stops the current reduce and returns a value. You might want `some` in this case. (let [matched (some matches? regexes)] ...) http://clojure.github.io/clojure/clojure.core-api.html#clojure.core/some Also filter + first has a similar effect. Thanks,

Re: Breaking out of doseq

2013-11-27 Thread Jonathon McKitrick
To clarify what I'm trying to do, I have a map of regexes, and after iterating them, when one matches (the order of the regexes is significant) I want exactly one result returned by applying the looked up function to the string. After that regex matches, no more matches should be attempted. Wh

Re: Breaking out of doseq

2013-11-27 Thread Jonathon McKitrick
Ah, maybe recursion is the answer! On Wednesday, November 27, 2013 9:26:21 AM UTC-5, Jonathon McKitrick wrote: > > I'm iterating a map (regex -> function) and I'd like to call FUNCTION with > the result of re-groups after a match for REGEX is found. I also want to > exit the sequence, returning

Re: Breaking out of doseq

2013-11-27 Thread Jay Fields
I'm not sure doseq is what you want.. I'd probably just use loop recur. On Wed, Nov 27, 2013 at 9:43 AM, Jonathon McKitrick wrote: > To clarify what I'm trying to do, I have a map of regexes, and after > iterating them, when one matches (the order of the regexes is significant) I > want exactly o

Re: Breaking out of doseq

2013-11-27 Thread Ambrose Bonnaire-Sergeant
Hi Jonathon, I'm not sure I fully understand what you're after, but I suspect reduce + reduced would be helpful. (reduce (fn [a c] (reduced 'foo)) [] [1 2 3]) ;=> 'foo As far as I'm aware you can't exit a doseq early. (Actually I guess you could use a mutable reference as the argument to :while,

Breaking out of doseq

2013-11-27 Thread Jonathon McKitrick
I'm iterating a map (regex -> function) and I'd like to call FUNCTION with the result of re-groups after a match for REGEX is found. I also want to exit the sequence, returning the results of FUNCTION. In common lisp, I would use return-from, but how would this be done in clojure? -- -- You