Hi mike, Your problem is about to calling a function with a list of arguments, which is independent of varargs. Take a look at the "apply" function. It does what you're looking for.
Cheers -Patrick On Sep 14, 2:47 am, Michael Ossareh <ossa...@gmail.com> wrote: > Hi, > > I don't fully understand how to make real use of varargs and > destructuring. c.c.sql/create-table is defined as follows: > > (create-table name & specs) > > Called as follows: > > (c.c.sql/create-table > :tblname > [:cola :text "NOT NULL" "PRIMARY KEY"] > [:colb :number "NOT NULL"] > [:colc :blob "NOT NULL")] > > I want to store my table definitions in a data structure (I'm open to > which one) such that I can get access to table names later on. However > if I store the definitions in a vector which each element is a vector > of arguments to create-table I'm not able to pass the correct > arguments to create-table. > > An example of the data structure: > > (def schema > [[:users > [:id :text "PRIMARY KEY" "NOT NULL"] > [:domain :text "NOT NULL"] > [:email :text :unique "NOT NULL"] > [:password :text "NOT NULL"] > [:name :text "NOT NULL"] > [:created :bigint "NOT NULL"] > [:last_login :bigint]] > > [:user_token > [:token :text :unique "PRIMARY KEY" "NOT NULL"] > [:user_id :text "NOT NULL" "REFERENCES users(id) ON DELETE CASCADE"] > [:client :text "NOT NULL"] > [:created :bigint "NOT NULL"] > [:last_used :bigint]]]) > > (defn x [a & b] (prn (str "a: " a)) (prn (str "b: " b))) > > (map (fn [y] (x (first y) (rest y))) schema) > > results in: > > ("a: :users" > "b: (([:id :text \"PRIMARY KEY\" \"NOT NULL\"] [:domain :text \"NOT > NULL\"] [:email :text :unique \"NOT NULL\"] [:password :text \"NOT > NULL\"] [:name :text \"NOT NULL\"] [:created :bigint \"NOT NULL\"] > [:last_login :bigint]))" > "a: :user_token" > "b: (([:token :text :unique \"PRIMARY KEY\" \"NOT NULL\"] [:user_id > :text \"NOT NULL\" \"REFERENCES users(id) ON DELETE CASCADE\"] > [:client :text \"NOT NULL\"] [:created :bigint \"NOT NULL\"] > [:last_used :bigint]))") > > if I call create-table instead of `x` it gets two arguments, (first y) > and a vector containing the elements in (rest y) instead of (first y) > and each of the elements in (rest y). > > How is it possible for me to flatten b such that when passed to > c.c.sql/create-table its fn arguments are satisfied? I feel like > partial need to be used, however I haven't been able to figure it out. > > Any help much appreciated! > > Cheers, > > mike -- 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