On Sun, Oct 25, 2009 at 10:08 PM, John Harrop <[email protected]> wrote:
> ReadingĀ http://www.paulgraham.com/power.html and specifically the section
> titled "Metrics" near the top, I realized that it would be very easy to
> calculate such metrics for Lisp code, and it took me literally only seconds
> to hack something in Clojure:
>
> user=> (defn count-nodes [data] (if (clojure.contrib.core/seqable? data) (+
> 1 (reduce + 0 (map count-nodes data))) 1))
> #'user/count-nodes
> user=> (count-nodes '(+ 3 (* 2 7)))
> 7
Fun!
> The count-nodes function itself has a code complexity of 22 by the same
> measure:
> user=> (count-nodes '(defn count-nodes [data] (if
> (clojure.contrib.core/seqable? data) (+ 1 (reduce + 0 (map count-nodes
> data))) 1)))
Well, speaking of higher-order functions and golf...
(count-nodes
'(defn count-nodes [data]
(count (tree-seq clojure.contrib.core/seqable? seq data))))
; 12
Unfortunately I don't think contrib's sequable is quite what we want:
(count-nodes "abcde")
; 6
This is a bit closer I think:
(count-nodes
'(defn count-nodes [data]
(count (tree-seq (partial instance? clojure.lang.Seqable) seq data))))
; 15
...though preferring 'partial' over #() is of debatable merit.
--Chouser
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---