'alter' expects your anonymous function to take at least one argument (the 
current value of the ref being altered), whereas you've passed a 0-arg 
function - there's no mention of a '%' so Clojure expands it to:

(fn []
  (update-in @v (fnil conj [])))

Indeed, I suspect you want a 2-arg function here - one for the current 
value of the ref and one for the number to conj on - if you were writing it 
in expanded form you'd write:

(fn [v x]
  (update-in v (fnil conj []) x))

Or, in compact form: 

#(update-in %1 (fnil conj []) %2)

HTH,

James

On Tuesday, 17 June 2014 19:05:10 UTC+1, Hussein B. wrote:
>
> Thanks, it works.
>
> In case, my initial map is a ref type
>
> (def m (ref { } ))
>
> Why this isn't working?
>
> (dosync 
>
>    (alter m #(update-in @v [1] (fnil conj [ ])) 11))
>
> On Tuesday, June 17, 2014 7:55:14 PM UTC+2, Mauricio Aldazosa wrote:
>>
>> For updating the value of a map given a key you can use update-in:
>>
>> user> (update-in {1 [11]} [1] conj 22)
>> {1 [11 22]}
>>
>> Now, to handle the case when the key is not present, you can use fnil:
>>
>> user> (update-in {} [1] (fnil conj []) 22)
>> {1 [22]}
>> ​
>> Cheers,
>> Mauricio
>>
>

-- 
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
--- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to