This and Jonas' are my current favourites, for what that's worth.
Keep the suggestions coming!
On Friday, 10 January 2014 17:29:20 UTC, Laurent PETIT wrote:
>
> What about this one?
>
> Inspired by Stefan's, with more destructuring in loop, format-fn as a
> function, initial call to (seq) then (next) instead of (rest), placing the
> exit argument first so that it's not lost at the end of the function,
> renamed word as item since this function does not depend on the type of
> items.
>
> (defn uniquify [in format-fn]
> (loop [[item :as in] (seq in)
> {n item :as item-nbrs} {}
> out []]
> (if-not in
> out
> (let [format-fn (if n format-fn (constantly item))]
> (recur (next in)
> (update-in item-nbrs [item] (fnil inc 0))
> (conj out (format-fn item n)))))))
>
>
> 2014/1/10 Laurent PETIT <[email protected] <javascript:>>
>
>> no you have a bug in this last version, it now skips the last result
>>
>>
>> 2014/1/10 Stefan Kanev <[email protected] <javascript:>>
>>
>>> Somehow I totally forgot I could use destructuring. Here's a slightly
>>> shorter version:
>>>
>>> (defn uniquify [words]
>>> (loop [encountered {}
>>> result []
>>> [word & remaining] words]
>>> (if (seq remaining)
>>> (let [occurences (get encountered word)
>>> modified (if occurences
>>> (str word "_" occurences)
>>> word)]
>>> (recur (update-in encountered [word] (fnil inc 0))
>>> (conj result modified)
>>> remaining))
>>> result)))
>>>
>>> --
>>> Stefan Kanev ¦ @skanev ¦ http://skanev.com/
>>> You can measure a programmer's perspective by noting his attitude on the
>>> continuing vitality of FORTRAN.
>>>
>>> --
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to [email protected]<javascript:>
>>> 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] <javascript:>
>>> 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] <javascript:>.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>
>>
>
--
--
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/groups/opt_out.