A couple other things: 1) (apply identity ...) is the same as (first ...) 2) Consider using the ->> macro to clean up the let
Here's a quick rewrite: (defn make-target ([file channel sweepidx] (make-target file channel sweepidx 0)) ([file channel sweepidx startidx] (make-target file channel sweepidx startidx nil)) ([file channel sweepidx startidx size] (let [target (->> (graph-part file channel sweepidx (inc sweepidx)) first (drop startidx))] (if size (take size target) target)))) Lastly, if graph-part happened to return something like a vector or string, there are faster ways of taking a slice than take & drop -- that is, subvec or subs. HTH, Justin On Sep 2, 10:20 am, Miki <miki.teb...@gmail.com> wrote: > Hello Glen, > > I'd use the first two forms to set startidx and size and then call the > "full" form: > > (def inf java.lang.Double/POSITIVE_INFINITY) > > (defn make-target > "Parses text file for single sweep specified by sweepidx. If size > is > not specified will parse till end of sweep. If startidx and size > are > not spefified will parse from beginning to end" > ([file channel sweepidx] > (make-target file channel sweepidx 0 inf)) > ([file channel sweepidx startidx] > (make-target file channel sweepidx startidx inf)) > ([file channel sweepidx startidx size] > ([file channel sweepidx startidx size] > (let [collated-target1 (graph-part file channel sweepidx (+ 1 > > sweepidx)) > collated-target2 (apply identity collated-target1) > ;apply starting point and size parameters > collated-target3 (take size (drop startidx collated- > target2))] > collated-target3))) > > On Sep 2, 5:54 am, Glen Rubin <rubing...@gmail.com> wrote: > > > > > I defined a fn whose execution depends on the number of parameters > > passed to it. It works fine! I am just concerned that I am doing > > this in a way that is not as concise as it could or should be. Here > > is my fn: > > > (defn make-target > > > "Parses text file for single sweep specified by sweepidx. If size is > > not specified will parse till end of sweep. If startidx and size are > > not spefified will parse from beginning to end" > > > ([file channel sweepidx] > > (let [collated-target1 (graph-part file channel sweepidx (+ 1 > > sweepidx)) > > ;break open double parens > > collated-target2 (apply identity collated-target1)] > > collated-target2)) > > > ([file channel sweepidx startidx] > > (let [collated-target1 (graph-part file channel sweepidx (+ 1 > > sweepidx)) > > collated-target2 (apply identity collated-target1) > > ;;apply starting point > > collated-target3 (drop startidx collated-target2)] > > collated-target3)) > > > ([file channel sweepidx startidx size] > > (let [collated-target1 (graph-part file channel sweepidx (+ 1 > > sweepidx)) > > collated-target2 (apply identity collated-target1) > > ;apply starting point and size parameters > > collated-target3 (take size (drop startidx collated-target2))] > > collated-target3))) -- 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