This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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)] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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#] |
OlderNewer