or even without let: (condp re-find msg #"^:(.*?)!.*PRIVMSG (.*) :(.*)" :>> (fn [[_ from to message]] (true-form ...)) (false-form...))
On Saturday, June 22, 2013 11:26:35 PM UTC+12, Vincent wrote: > > What about using condp? > > (condp re-find msg > #"^:(.*?)!.*PRIVMSG (.*) :(.*)" :>> #(let [[_ from to message] %] > (logic...))) > > Vincent > > On Friday, 21 June 2013 17:43:50 UTC+2, Steven Arnold 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 [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] 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 [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
