On 29 October 2014 11:20, Roelof Wobben <rwob...@hotmail.com> wrote:

> Thanks James,
>
> But how do I use assoc with it
>
> I tried this :
>
> (defn add-author [book new-author]
>   (assoc book (conj (book :authors) new-author)))
>
> but then I see this message :
>
>
> ArityException Wrong number of args (2) passed to: core$assoc  
> clojure.lang.AFn.throwArity (AFn.java:437)
>

Right, so take a look at that error message. It says you've got the wrong
number of arguments for assoc.

Your code has:

    (assoc book (conj (book :authors) new-author))

So your code is passing two arguments to assoc:

    (let [new-authors-list (conj (book :authors) new-author)]
      (assoc book new-authors-list))

Clojure says that's wrong, because assoc takes at least three arguments.
Take a look at: http://clojuredocs.org/clojure.core/assoc

So the way it's supposed to look is:

    (assoc map key value)

You have your map (book), and you have your value (new-authors-list), but
you haven't specified a key. Your code should look like:

    (assoc book :authors (conj (book :authors) new-author))

Incidentally, there's also a shortcut for forms like this:

    (update-in book [:authors] conj new-author)

- James

-- 
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