User:Wynand.winterbach: Difference between revisions

From Rosetta Code
Content added Content deleted
(New page: (import '(java.lang Thread)) (import '(java.io File FileReader BufferedReader FileWriter BufferedWriter)) (defn open [fname] (open fname "r") [...)
 
No edit summary
 
Line 1: Line 1:
(import '(java.lang Thread))
<nowiki>(import '(java.lang Thread))
(import '(java.io File
(import '(java.io File
FileReader BufferedReader
FileReader BufferedReader
Line 44: Line 44:
(. reader join)
(. reader join)
(. writer join)
(. writer join)
</nowiki>

Latest revision as of 00:47, 5 July 2008

(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)