recur doesn't work well with multimethods:

    (defmulti foo identity)
 
    (defmethod foo 1 [n]
      (recur (dec n)))
 
    (defmethod foo 0 [n]
      :ok)
 
    (foo 1) ;; runs forever

Jonas

On Monday, December 17, 2012 6:56:34 PM UTC+2, juan.facorro wrote:
>
> What about recur <http://clojure.org/special_forms#recur>? 
>
> It's a special form used for tail call optimizations.
>
> Juan
>
> On Monday, December 17, 2012 1:32:31 PM UTC-3, bruce li wrote:
>>
>> Hello, everyone.
>>
>> I'm currently trying to model an automata using multi-method. So in my 
>> code, I have something like:
>>
>> (defmethod trans :state
>>      [state]
>>      ; .......
>>      (trans ......))))
>>
>> In the last line, the trans will be called with some different state.
>>
>> However, it seems that such call still consumes stack and I quickly come 
>> to a stack overflow error when the states are reached multiple times.
>>
>> I'm wondering if there is some ways to optimize the code.
>>
>> Thanks!
>>
>

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

Reply via email to