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 <[email protected]> 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 <[email protected]> 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 [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