;;;;;; ;;;;;; ;;;;;; IO ;;;;;; ;;;;;; ;;; ;;; IO ;;; (define $print (procedure [$x] (do {[(write x)] [(write "\n")] [(flush)] }))) (define $print-to-port (procedure [$port $x] (do {[(write-to-port port x)] [(write-to-port port "\n")] }))) (define $display (compose show print)) (define $display-to-port (procedure [$port $x] (print-to-port port $ (show x)))) (define $each-line (procedure [$proc] (do {[$eof (eof?)]} (if eof (return []) (do {[$line (read-line)] [(proc line)]} (each-line proc)))))) (define $each-line-from-port (procedure [$port $proc] (do {[$eof (eof-port? port)]} (if eof (return []) (do {[$line (read-line-from-port port)] [(proc line)]} (each-line-from-port port proc)))))) (define $each-file (procedure [$files $proc] (match files (list string) {[ (return [])] [ (do {[$port (open-input-file file)] [(each-line-from-port port proc)] [(close-input-port port)]} (each-file rest proc))]}))) ;;; ;;; Collection ;;; (define $each (procedure [$proc $xs] (match xs (list something) {[ (do {})] [ (do {[(proc x)]} (each proc rs))]}))) ;;; ;;; Debug ;;; (define $debug (macro [$expr] (io (do {[(print (show expr))]} (return expr)))))