A little bit OT, but for files where you prefer to write your
declarations "top down" rather than "bottom up":

(defmacro top-down [ & body ]
  `(do ~@(reverse body)))

then

(defn utility-fn [])
(defn high-level-fn [] (utility-fn))

becomes

(top-down

(defn high-level-fn [] (utility-fn))

(defn utility-fn [])

)

:)
2010/8/14 Btsai <benny.t...@gmail.com>:
> Continuing this train of thought...
>
> 1. The "declare" macro may be handy for declaring multiple names at
> once.
>
> 2. Maybe one could use the functions in clojure.repl or clojure-
> contrib.ns-utils to write something that automatically forward
> declares everything needed?
>
> On Aug 13, 10:49 pm, Tim Daly <d...@axiom-developer.org> wrote:
>> Suppose you make a file containing a
>> (def foo)
>> form for every defn in every file and then load that first?
>> Does that solve the circular reference problem?
>>
>> Tim Daly
>>
>>
>>
>> Eric Lavigne wrote:
>> > The (def g) in your example has the same effect as the (declare foo)
>> > in my example.
>>
>> > I discussed two problems. The first problem, which you addressed, was
>> > mostly just a warm-up for discussing a related problem that is more
>> > severe. Where can I put (def g) so that two files can "require" each
>> > other?
>>
>> > This is not a rare problem for me. Like Mike Anderson, I work around
>> > it by putting extra thought into which package-level dependencies I
>> > will allow, which sometimes necessitates creating more or fewer
>> > packages than I otherwise would have created.
>>
>> > On Sat, Aug 14, 2010 at 12:13 AM, Wilson MacGyver <wmacgy...@gmail.com> 
>> > wrote:
>>
>> >> I rarely run into this. The few times I have, I just do
>>
>> >> (def g) ;creates a var g that is unbound
>>
>> >> (defn f []
>> >>      (g)) ;ok
>>
>> >> (defn g [] ;f will call this
>> >>      nil)
>>
>> >> as shown by Rich at
>>
>> >>http://markmail.org/message/vuzvdr4xyxx53hwr#query:+page:1+mid:tzsd3k...
>>
>> >> On Fri, Aug 13, 2010 at 11:49 PM, Eric Lavigne <lavigne.e...@gmail.com> 
>> >> wrote:
>>
>> >>> Suppose I have two functions in the same file, and one depends on the 
>> >>> other:
>>
>> >>>   (defn foo [x] (+ 1 x))
>> >>>   (defn bar [x] (* 2 (foo x)))
>>
>> >>> I can't switch their order without adding extra forward-declaration
>> >>> code, which is redundant:
>>
>> >>>   (declare foo)
>> >>>   (defn bar [x] (* 2 (foo x)))
>> >>>   (defn foo [x] (+ 1 x))
>>
>> >> --
>> >> Omnem crede diem tibi diluxisse supremum.
>>
>> >> --
>> >> 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 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 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