User:Wynand.winterbach

From Rosetta Code

(import '(java.lang Thread)) (import '(java.io File FileReader BufferedReader FileWriter BufferedWriter)) (defn open [fname] (open fname "r") [fname mode] (let [file (new File fname)] (cond (= mode "r") (new BufferedReader (new FileReader file)) (= mode "w") (new BufferedWriter (new FileWriter file))))) (def line-box (ref nil)) (def count-box (ref -1)) (defn read [file] (doseq line (take-while (comp not nil?) (map #(. % readLine) (repeat b))) (when (nil? @line-box) (alter line-box (fn [x] line)))) (. file close) (alter line-box (partial cons 'done)) (loop [] (if (< @count-box 0) (recur))) (println @count-box)) (defn write [file] (binding [n 0] (loop [] (when (not (nil? @line-box)) (. file (write @line-box)) (. file newLine) (alter line-box (fn [x] nil)) (set! n (+ n 1))) (recur)) (. file close) (alter count-box (fn [x] n)))) (def reader (new Thread #(read (open "input.txt")))) (def writer (new Thread #(write (open "output.txt" "w")))) (. reader start) (. writer start) (. reader join) (. writer join)