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
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'
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
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,
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
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
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
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,
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