Jump to content

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)

Cookies help us deliver our services. By using our services, you agree to our use of cookies.