Skip to content

Instantly share code, notes, and snippets.

@peterwang
Last active November 8, 2021 03:21
Show Gist options
  • Save peterwang/6a3d494b0eaffc4be1fe03036228d9e9 to your computer and use it in GitHub Desktop.
Save peterwang/6a3d494b0eaffc4be1fe03036228d9e9 to your computer and use it in GitHub Desktop.
;; This buffer is for Clojure experiments and evaluation.
;; Press C-j to evaluate the last expression.
(defn super-classes
[class]
(loop [ret {} cs (set (map #(conj [class] %) (bases class)))]
(if (seq cs)
(let [c (first cs)
bs (map #(conj c %) (bases (last c)))]
(recur (assoc-in ret c {}) (into (disj cs c) bs)))
ret)))
(defn print-tree
([tree] (print-tree tree 0))
([tree level]
(doseq [k (keys tree)]
(println ";;" (apply str (repeat level "\t")) k)
(print-tree (tree k) (inc level)))))
(->> (class [])
(super-classes)
(print-tree))
;; clojure.lang.PersistentVector
;; clojure.lang.IKVReduce
;; clojure.lang.APersistentVector
;; java.io.Serializable
;; clojure.lang.AFn
;; clojure.lang.IFn
;; java.util.concurrent.Callable
;; java.lang.Runnable
;; java.lang.Object
;; java.lang.Comparable
;; clojure.lang.IHashEq
;; clojure.lang.IPersistentVector
;; clojure.lang.Indexed
;; clojure.lang.Counted
;; clojure.lang.IPersistentStack
;; clojure.lang.IPersistentCollection
;; clojure.lang.Seqable
;; clojure.lang.Associative
;; clojure.lang.IPersistentCollection
;; clojure.lang.Seqable
;; clojure.lang.ILookup
;; clojure.lang.Reversible
;; clojure.lang.Sequential
;; java.util.RandomAccess
;; java.util.List
;; java.util.Collection
;; java.lang.Iterable
;; java.lang.Iterable
;; clojure.lang.IReduce
;; clojure.lang.IReduceInit
;; clojure.lang.IObj
;; clojure.lang.IMeta
;; clojure.lang.IEditableCollection
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment