User:Wynand.winterbach

From Rosetta Code
Revision as of 00:47, 5 July 2008 by rosettacode>Wynand.winterbach (New page: (import '(java.lang Thread)) (import '(java.io File FileReader BufferedReader FileWriter BufferedWriter)) (defn open [fname] (open fname "r") [...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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