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.


Reply via email to