Not a specific answer to your question, but it would be cool to see someone
make the core.match regex facilities handle this.

(match [msg]
  [(#"^:(.*?)!.*PRIVMSG (.*) :(.*)" :>> [from to message])] ... true form
...
  :else ... false form ..)

David


On Fri, Jun 21, 2013 at 11:43 AM, Steven D. Arnold <
thoth.amon.i...@gmail.com> wrote:

> Hi, I am writing a simple IRC bot, pretty much just for fun, starting with
> a simple implementation originally posted by Nurullah Akkaya on his blog.
>  It already does what it's supposed to, which is message a fortune from
> mod-fortune (shelling out) when someone asks it to.
>
> However, there's a bit of code I don't like.  It looks like this:
>
>      (cond
>        (re-find #"^:(.*?)!.*PRIVMSG (.*) :(.*)" msg)
>          (let [[_ from to message] (re-find #"^:(.*?)!.*PRIVMSG (.*)
> :(.*)" msg)]
>            [...logic omitted...]
>
> What's happening is we're looking for a PRIVMSG, and if we find one, we
> scan the message again and pull out the chunks we're interested in, and use
> them in the "logic" part below.
>
> The problem is I don't like maintaining two regular expressions.  I wish I
> could use it only once, and therefore change it only once if it needs to be
> modified.  I'd prefer to see an expression that looks like this (for
> example):
>
> (cond
>  (if-matched #"^:(.*?)!.*PRIVMSG (.*) :(.*)" msg
>    [from to message]
>    (true form)
>    (optional false form)))
>
> The if-matched acts as a let block while pulling out groups and assigning
> to local variables at the same time.  Also, it ignores the first "match" of
> re-find, which is the entire expression -- not generally useful to me.
>  Maybe if-matched-groups would ignore the overall expression, and
> if-matched would include it.
>
> I suppose a macro might be the way to go to accomplish this, but I wonder
> if there are any Clojure tricks that could accomplish this short of a
> macro.  Also, do any fellow Clojurians think a macro like this is a bad
> idea in general?  Would you suggest taking a different tack to solve this
> problem?
>
> Thanks in advance!
> steven
>
> --
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to