Skip to content

Instantly share code, notes, and snippets.

View alexy's full-sized avatar

Alexy Khrabrov alexy

View GitHub Profile
user=> (defn audit-ns [ns]
(let [publics (ns-publics ns)]
(map key (remove #(let [m (-> % val meta)] (or (:doc m) (:added m))) publics))))
#'user/audit-ns
user=> (audit-ns (find-ns 'clojure.core))
(chunked-seq? find-protocol-impl chunk-buffer find-protocol-method EMPTY-NODE await1 -reset-methods *allow-unresolved-vars* proxy-call-with-super
munge print-doc *math-context* with-loading-context unquote-splicing chunk-cons chunk-append destructure -cache-protocol-fn print-dup
*use-context-classloader* proxy-name print-ctor chunk-rest method-sig print-method hash-combine chunk definterface unquote primitives-classnames
rational? chunk-first *source-path* *assert* print-special-doc chunk-next print-simple)
(defn map-same
"like map, but returns a collection of the same type as the first input collection"
[f & colls]
(let [first-coll (first colls)]
(if (list? first-coll)
(list* (apply map f colls))
(into (empty first-coll) (apply map f colls)))))
(defn assoc-autoinc [m k]
(if (get m k)
m
(let [v (inc (:last-value (meta m) -1))]
(with-meta
(assoc m k v)
(assoc (meta m) :last-value v)))))
(defn get-or-autoinc! [m k]
(if-let [v (get @m k)]
(def m (ref {}))
(defn str-to-int [m s]
(or (@m s)
(dosync
(alter m assoc s (count @m))
(@m s))))
@alexy
alexy / growl.clj
Created March 19, 2010 00:41 — forked from hiredman/growl.clj
(defn process-args [m]
(mapcat (fn [[flag value]] [(format "--%s" (name flag)) value]) m))
(defn growl [m]
(-> (Runtime/getRuntime)
(.exec
(into-array
String
(cons "/usr/local/bin/growlnotify" (process-args m))))))
(defmacro ->r
"The proposed Rohner arrow"
([x] x)
([x form] (if (seq? form)
(with-meta (replace {'_ x} form) (meta form))
(list form x)))
([x form & more] `(->r (->r ~x ~form) ~@more)))
(use 'clojure.walk)
(let [cursor (fetch-eager :where {... whatever ...})
res (transient [])]
(while (.hasNext cursor)
(conj! res (-> cursor .next .toClojure)))
(persistent! res))
;;
tom-desktop% pwd [~]
/home/tom
tom-desktop% ghci [~]
GHCi, version 6.10.4: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Prelude> :module Database.TokyoCabinet
Prelude Database.TokyoCabinet> runTCM $ do { db <- new :: TCM HDB; open db "foo.tch" [OWRITER, OCREAT]; put db "bar" "baz"; close db }
Loading package bytestring-0.9.1.4 ... linking ... done.
;variants of the code from point #2 of:
; http://www.tbray.org/ongoing/When/200x/2009/12/01/Clojure-Theses
;original
(apply merge-with +
(pmap count-lines
(partition-all *batch-size*
(line-seq (reader filename)))))
@alexy
alexy / foo.clj
Created December 2, 2009 08:32 — forked from hiredman/foo.clj
(defn sig [x]
(:sig (meta (resolve x))))
(defmulti type-of (comp type first list))
(defmethod type-of :function [thing & _] (sig thing))
(defmethod type-of java.util.List [expr & a]
(conj (map #(type-of % (first a)) (rest expr))