One example is a contract programming job I did recently, writing
software for identifying radioactive isotopes based on measurements of
their emission spectra. In the end I had 7 Clojure source files (not
including tests). I will show them in such an order that each file
depends only on previous files.

math (11 definitions, 80 lines)
matching (5 definitions, 54 lines)
units (2 definitions, 15 lines)
io (7 definitions, 74 lines)
physics (4 definitions, 28 lines)
metrics (7 definitions, 174 lines)
main (1 definition, 35 lines)

I originally wanted to include the contents of the units file in the
physics file, but then there would be a circular dependency between
physics and io. The io code needs to interpret half-life values in
files that provide information about isotopes, and those half-life
values are meaningless if you don't know the relationship between
seconds, hours, and years. Physics code needs access to io code quite
frequently because, for example, you can't determine what portion of
photons will penetrate a 1/4" thick iron plate without reading iron's
transmission coefficients as a function of photon energy from a file.
It's not a big deal to have a units package, but I don't typically
create a new category for just two definitions that already fit well
in one of the existing categories.

Also, there were two functions in the physics package that I moved to
the math package so that functions in the io package could depend on
them. These functions were responsible for sorting emission lines by
energy and filtering out emission lines that would not be included in
the analysis because their energies are often associated with false
positives. These operations need to be performed on every isotope that
is read from the application's isotope library, and the easiest way to
arrange that is to call them from the function that reads the isotope
library. Again, not a big deal, but I would not ordinarily include
code in the math package that can only operate on emission data - that
belongs in physics.


On Sat, Aug 14, 2010 at 1:37 AM, Wilson MacGyver <wmacgy...@gmail.com> wrote:
> I realize that. I was pondering why I don't run into the the 2nd problem.
>
> In your code, how many files/name spaces are you creating?
> And how many lines of code are in each file? I'm curious how you
> organize your code.
>
>
> On Aug 14, 2010, at 12:39 AM, Eric Lavigne <lavigne.e...@gmail.com> wrote:
> .
>>
>> 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.
>>>
>
> --
> 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