This still seems very verbose to me. I think it is because the definition
of "open," "opposite," and "closed" are implicit in the great big blocks of
arithmetic you are doing. I think a useful exercise would be to define
edges in terms of points, and maybe faces in terms of edges and an `face?`
function. Then define different properties like `open?` in terms of
functions on edges.
E.g. if you define a point as a keyword, and an edge as a set of 2 points:
(def o :O)
(def a :A)
(def oa #{o a})
;; ...etc...
(defn connected? [edge-1 edge-2]
(= 1 (count (set/intersection edge-1 edge-1))))
(defn open? [edge-1 edge-2 edge-3] ...)
Then I think the below function will eventually become something like
(->> edges
open-triads
;; could give inner fn a name, too
(map (fn [triad] (product (map edge-length triad))))
sum)
The code as a whole will be more verbose, but it will be a verbosity that
has evident meaning.
Happy Clojuring,
Leif
On Thursday, July 30, 2015 at 7:59:27 PM UTC-4, kirby urner wrote:
>
>
> Thanks to excellent feedback, I now realize my code was overly verbose, a
> common phenomenon among beginners in many a computer language.
>
> As an example, the newer version replaces this:
>
>
> ===
>>
>> (ns test-project.synmods)
>>
>> (defn add-open
>> [edges]
>> (let [[a b c d e f] edges
>> [a2 b2 c2 d2 e2 f2] (map (fn [x] (* x x)) edges )]
>> (do
>> (reduce + [
>> (reduce * [f2 a2 b2])
>> (reduce * [d2 a2 c2])
>> (reduce * [a2 b2 e2])
>> (reduce * [c2 b2 d2])
>> (reduce * [e2 c2 a2])
>> (reduce * [f2 c2 b2])
>> (reduce * [e2 d2 a2])
>> (reduce * [b2 d2 f2])
>> (reduce * [b2 e2 f2])
>> (reduce * [d2 e2 c2])
>> (reduce * [a2 f2 e2])
>> (reduce * [d2 f2 c2])])
>> )))
>>
>>
>
>
> ... with this:
>
>
>
>
> (defn add-open
> [edges]
> (let [[a b c d e f] edges
> [a2 b2 c2 d2 e2 f2] (map (fn [x] (* x x)) edges )]
> (+ (* f2 a2 b2)
> (* d2 a2 c2)
> (* a2 b2 e2)
> (* c2 b2 d2)
> (* e2 c2 a2)
> (* f2 c2 b2)
> (* e2 d2 a2)
> (* b2 d2 f2)
> (* b2 e2 f2)
> (* d2 e2 c2)
> (* a2 f2 e2)
> (* d2 f2 c2))
> ))
>
> Much simpler! Thank you. I'll look into testing features.
>
> In my Python version of the above, I do in fact, invoke the unittest
> framework.
>
> Kirby
>
>
>
--
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/d/optout.