Skip to content

Instantly share code, notes, and snippets.

@gugat
Created December 16, 2015 06:34
Show Gist options
  • Select an option

  • Save gugat/210f5be93b162f1f0ebc to your computer and use it in GitHub Desktop.

Select an option

Save gugat/210f5be93b162f1f0ebc to your computer and use it in GitHub Desktop.
Find ocurrences of items
(let [my_list '(a b b c a a c) my_set (set my_list)]
(zipmap
my_set
(map
(fn [y]
(count
(filter
(fn [x] (= x y)) my_list
)
)
) my_set
)
)
)
@jplaza
Copy link
Copy Markdown

jplaza commented Dec 21, 2015

(def l '(a b b c a a c))
(defn inc* [x] (if-not x 1 (inc x)))
(reduce (fn [v v2] (update-in v [v2] inc*)) {} l)

@jplaza
Copy link
Copy Markdown

jplaza commented Dec 22, 2015

Una versión más idiomática de tu solución

(let [my-list '(a b b c a a c)
      ks (set my-list)]
  (into {} (map (fn [y] [y (count (filter #{y} my-list))]) ks)))

;; O también

(let [my-list '(a b b c a a c)
      ks (set my-list)]
  (zipmap ks (map (fn [y] (count (filter #{y} my-list))) ks)))

;; Hecha función

(def my-list '(a b b c a a c))

(defn count-ocurrences [my-list]
  (let [ks (set my-list)]
    (into {} (map (fn [y] [y (count (filter #{y} my-list))]) ks))))

(clojure.pprint/pprint (count-ocurrences my-list))

@eraad
Copy link
Copy Markdown

eraad commented Dec 22, 2015

(defn freq [the-list] (reduce #(assoc %1 %2 (inc (%1 %2 0))) {} the-list))

@jplaza
Copy link
Copy Markdown

jplaza commented Dec 22, 2015

Similar a la mía pero igual válida 😄
Que viva la programación funcional 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment