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

Reply via email to