Don't try to force the destructuring DSL to do more than it was intended to
do.  Just do it manually (or write a macro if you really insist):



(defn foo
  [& args]
  (let [ [a b c] (take 3 args)
         mid3     (take 3 (drop 3 args))
         [g h i] (drop 6 args) ]
    (when (< 9 (count args))
      (throw (IllegalArgumentException. (str "Too many args:" args))))))

(foo 1 2 3 4 5 6 7 8 9) => nil
(foo 1 2 3 4 5) => nil
(foo 1 2 3 4 5 6 7 8 9 10) =>   java.lang.IllegalArgumentException: Too
many args:(1 2 3 4 5 6 7 8 9 10),



On Wed, May 10, 2017 at 6:17 PM, Kevin Kleinfelter <
kleinfelter.gro...@gmail.com> wrote:

> Can I destructure a list, assigning the first and last few items
> individually, while putting several items from the middle into a list?
>
> I see that I can assign a list:
>   (let [a '( 1 2 3 4)] ...)
>
> I can destructure the list as a whole:
>   (let [[a b c d] '(1 2 3 4)] ...)
>
> I can destructure the list and bundle the TRAILING elements into a list:
>   (let [[a & stuff] '(1 2 3 4)] ...))
>
> But suppose I had a list of 9 items and I wanted the first 3 individually,
> 3 in the MIDDLE as a list, and the last 3 individually.  Something like:
>   (let [[a b c & middle d e f] '( 1 2 3 4 5 6 7 8 9)] ...)
>
> How do I do that?
>
> Tnx.
>
> --
> 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
> ---
> 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 clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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
--- 
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to