Skip to content

Instantly share code, notes, and snippets.

(import [java.io PrintStream]
[java.util Scanner]
[java.net ServerSocket])
(use '[clojure set])
(defn serve
[service port]
(let [server (ServerSocket. port)]
(while (not (.isClosed server))
(let [sock (.accept server)]
user> (use 'clojure.java.io)
nil
user> (->> "/etc/dictionaries-common/words" file reader line-seq
(map #(.toLowerCase %))
(filter #(every? #{\q \u \i \t} (seq %))))
("" "i" "it" "q" "t" "ti" "tut" "tutu" "u" "i" "it" "q" "quit" "t" "ti" "tit" "tutu" "u")
@amalloy
amalloy / .emacs
Created September 27, 2010 20:33
(defun smart-line-beginning ()
"Move point to the beginning of text on the current line; if that is already the current position of point, then move it to the beginning of the line."
(interactive)
(let ((pt (point)))
(beginning-of-line-text)
(when (eq pt (point))
(beginning-of-line))))
(global-set-key "\C-a" 'smart-beginning-of-line)
user> (defn make-getter [name type]
(list 'def name type))
#'user/make-getter
user> (defmacro make-gets [names types]
`(map make-getter names types))
#'user/make-gets
user> (macroexpand '(make-gets [a b] ["str" "int"]))
(clojure.core/map user/make-getter user/names user/types)
user> (defn make-getter [name type]
(list 'def name type))
#'user/make-getter
user> (defmacro make-gets [names types]
`(do
~@(map make-getter names types)))
#'user/make-gets
user> (macroexpand '(make-gets [a] ['str]))
(do (def a (quote str)))
user> (make-gets [a] ['str])
user> (defn setter [[name type]]
[(symbol (str "set" name)) ; setName
[type] ; pass in an instance to set
nil]) ; returns the type
#'user/setter
user> (defn getter [[name type]]
[(symbol (str "get" name)) ; getName
[] ; no args to a getter
type]) ; returns the type
#'user/getter
(defn nested [seq1 & more-seqs]
"does an anonymous lazy 'for'-like nesting on a seq of seqs."
(letfn [(nestrec [prefix list [deep & deeper]]
(if deep
(mapcat #(nestrec (conj prefix %)
deep
deeper)
list)
(map #(conj prefix %) list)))]
(nestrec [] seq1 more-seqs)))
struct person {
char *name;
struct person *next;
};
person *remove(person *list, char *name) {
if (list->name == name) return list->next;
person *prev = list;
person *curr;
while (curr = prev->next) {
user>
(defn collatz [seed]
(lazy-seq
(cons seed
(cond
(= seed 1) nil
(even? seed) (collatz (/ seed 2))
:else (collatz (inc (* 3 seed)))))))#'user/collatz
user> (pprint (map collatz (range 1 10)))
((1)
(defmacro defrecord-with-ctor
"Declare a record with the given fields, as well as a
make-x (lower-case) taking a map instead of ordered fields"
[name field-vec]
(let [ctor-name (->> name str .toLowerCase (str "make-") symbol)
nil-args (repeat (count field-vec) nil)]
`(do
(defrecord ~name ~field-vec)
(let [template# (new ~name ~@nil-args)]
(defn ~ctor-name [arg-map#]