egison-3.10.2: lib/core/io.egi
;;;;;;
;;;;;;
;;;;;; 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
(procedure [$x]
(do {[(write x)]
[(flush)]
})))
(define $display-to-port
(procedure [$port $x]
(do {[(write-to-port port 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)
{[<nil> (return [])]
[<cons $file $rest>
(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)
{[<nil> (do {})]
[<cons $x $rs>
(do {[(proc x)]}
(each proc rs))]})))
;;;
;;; Debug
;;;
(define $debug
(lambda [%expr]
(io (do {[(print (show expr))]}
(return expr)))))
(define $debug2
(lambda [%msg %expr]
(io (do {[(display msg)]
[(print (show expr))]}
(return expr)))))