39 lines
1.3 KiB
Scheme
39 lines
1.3 KiB
Scheme
(define (call-with-input-file s p)
|
|
(let ((inport (open-input-file s)))
|
|
(if (eq? inport #f)
|
|
#f
|
|
(let ((res (p inport)))
|
|
(close-input-port inport)
|
|
res))))
|
|
|
|
(define (call-with-output-file s p)
|
|
(let ((outport (open-output-file s)))
|
|
(if (eq? outport #f)
|
|
#f
|
|
(let ((res (p outport)))
|
|
(close-output-port outport)
|
|
res))))
|
|
|
|
(define (with-input-from-file s p)
|
|
(let ((inport (open-input-file s)))
|
|
(if (eq? inport #f)
|
|
#f
|
|
(let ((prev-inport (current-input-port)))
|
|
(set-input-port inport)
|
|
(let ((res (p)))
|
|
(close-input-port inport)
|
|
(set-input-port prev-inport)
|
|
res)))))
|
|
|
|
(define (with-output-to-file s p)
|
|
(let ((outport (open-output-file s)))
|
|
(if (eq? outport #f)
|
|
#f
|
|
(let ((prev-outport (current-output-port)))
|
|
(set-output-port outport)
|
|
(let ((res (p)))
|
|
(close-output-port outport)
|
|
(set-output-port prev-outport)
|
|
res)))))
|
|
|