packages feed

egison-3.3.9: lib/core/io.egi

;;;;;
;;;;; Collection.egi
;;;;;

;;;
;;; Basic
;;;
(define $nop
  (return []))

;;;
;;; IO
;;;
(define $print
  (lambda [$x]
    (do {[(write x)]
         [(write "\n")]
         })))

(define $print-to-port
  (lambda [$port $x]
    (do {[(write-to-port port x)]
         [(write-to-port port "\n")]
         })))

(define $interact
  (lambda [$fn]
    (letrec {[$interact2
              (lambda [$xs]
                (do {[$eof (eof?)]
                     [(if eof
                        (write (fn xs))
                        (do {[$c (read-char)]
                             [(match c char
                                {[,'\n' (do {[(write (fn {@xs c}))]
                                             [(interact2 {})]})]
                                 [_ (interact2 {@xs c})]})]}))]}))]}
      (interact2 {}))))

;;;
;;; Collection
;;;
(define $each
  (lambda [$proc $xs]
    (match xs (list something)
      {[<nil> (do {})]
       [<cons $x $rs>
        (do {[(proc x)]
             [(each proc rs)]
             })]})))

;;;
;;; Others
;;;
(define $pure-rand
  (lambda [$s $e]
    (io (rand s e))))