Hi Herwig

Actually,defun just define a variadic arguments function,so it doesn't have
different arities. And when using defun macro ,it walk through the body
forms, find 'recur'  forms and replace them with (recur (vector
...arguments)) instead.

A macroexpand-1 result of accum:


(macroexpand-1

  '(defun accum

      ([0 ret] ret)

      ([n ret] (recur (dec n) (+ n ret)))

      ([n] (recur n 0))))

=>


(clojure.core/defn

 accum

 {:arglists '([0 ret] [n ret] [n])}

 [& args__4602__auto__]

 (clojure.core.match/match

  [(clojure.core/vec args__4602__auto__)]

  [[0 ret]]

  (do ret)

  [[n ret]]

  (do (recur (vector (dec n) (+ n ret))))

  [[n]]

  (do (recur (vector n 0)))))


The core procedure is at
https://github.com/killme2008/defun/blob/master/src/defun.clj#L97-107



2014-09-15 0:15 GMT+08:00 Herwig Hochleitner <hhochleit...@gmail.com>:

> Hi Dennis,
>
> marrying core.match to defn is a pretty neat idea. Thanks for releasing it!
>
> I see that you actually extended defn in that you made it possible to
> recur between different arities.
> Can you give a quick rundown on how you made that work? Are the arities
> still separate IFn arities? Does it still run in constant stack space?
>
> kind regards
>
> PS @adrian: If you feel like "Friendly advice" ing someone, why not do so
> in a private email?
>
> --
> 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/d/optout.
>



-- 
庄晓丹
Email:        killme2...@gmail.com xzhu...@avos.com
Site:           http://fnil.net
Twitter:      @killme2008

-- 
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/d/optout.

Reply via email to