On May 24, 2010, at 1:11 PM, Matthew Flatt wrote:

> At Mon, 24 May 2010 11:12:56 -0700, John Clements wrote:
>> Is there a good reason why port->lines doesn't close the input port?
> 
> An eof-of-file doesn't necessarily mean an end-of-stream, and error
> handling usually requires extra effort to close a port, which is why we
> usually use functions like `with-input-form-file'. Probably, though,
> it's mostly that port-reading functions don't normally close the port.
> 
>> Perhaps there 
>> could be an optional argument that allowed this behavior?
> 
> An optional keyword argument seems ok to me.


How about:

(port->lines p #:close-on-eof? #t)

implemented something like this:

extra optional arguments in port.rkt:
...
(define (port->lines [p (current-input-port)] #:line-mode [mode 'any] 
#:close-on-eof? [close-on-eof? #f])
  (port->x-lines 'port->lines p mode read-line close-on-eof?))

(define (port->bytes-lines [p (current-input-port)] #:line-mode [mode 'any] 
#:close-on-eof? [close-on-eof? #f])
  (port->x-lines 'port->bytes-lines p mode read-bytes-line close-on-eof?))
...

additional explicit arg in portlines.rkt:

(define (port->x-lines who p mode read-line close-on-eof?)
  (unless (input-port? p)
    (raise-type-error who "input-port" p))
  (check-mode who mode)
  (let loop ([l null])
    (let ([line (read-line p mode)])
      (if (eof-object? line)
          (begin0 (reverse l)
                  (when close-on-eof?
                    (close-input-port p)))
          (loop (cons line l))))))

If this makes sense, I'll add docs (and a test case, if there are existing 
rackety test cases for things like this).

N.B.: Nothing here is committed yet, and I'm not proposing this for 5.0.

John


Attachment: smime.p7s
Description: S/MIME cryptographic signature

_________________________________________________
  For list-related administrative tasks:
  http://list.cs.brown.edu/mailman/listinfo/plt-dev

Reply via email to