packages feed

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