call-with-port - call a procedure with a port, closing it afterwards

LIBRARY

(import (rnrs))                     ;R6RS
(import (rnrs io ports))            ;R6RS
(import (scheme base))              ;R7RS

SYNOPSIS

(call-with-port port proc)

DESCRIPTION

Calls proc with port as an argument. If proc returns, port is closed automatically and the values returned by proc are returned.

If proc does not return, port is not closed automatically, except perhaps when it is possible to prove that port will never again be used for an input or output operation.

RETURN VALUES

Returns whatever values proc returns.

EXAMPLES

(call-with-port (open-input-file "config.scm") read)

There are also examples in the put-bytevector(3scm) and put-u8(3scm) pages.

APPLICATION USAGE

This procedure is a convenience that sometimes makes it easier to structure code.

RATIONALE

Because Scheme's escape procedures have unlimited extent, it is possible to escape from the current continuation but later to resume it. If implementations were permitted to close the port on any escape from the current continuation, then it would be impossible to write portable code using both call-with-current-continuation(3scm) and call-with-port(3scm).

COMPATIBILITY

This procedure is identical in R6RS and R7RS, apart from the differences in error handling.

ERRORS

This procedure can raise exceptions with the following condition types:
&assertion (R6RS)
The wrong number of arguments was passed or an argument was outside its domain. In particular, this is raised if procedure does not accept one argument.
R7RS
The assertions described above are errors. Implementations may signal an error, extend the procedure's domain of definition to include such arguments, or fail catastrophically.

SEE ALSO

call-with-bytevector-output-port(3scm), call-with-string-output-port(3scm), call-with-input-file(3scm), with-input-from-file(3scm)

STANDARDS

R6RS, R7RS

HISTORY

This procedure is new in R6RS and later also became new in R7RS.

AUTHORS

This page is part of the scheme-manpages project. It includes materials from the RnRS documents. More information can be found at https://github.com/schemedoc/manpages/.


Markup created by unroff 1.0sc,    March 04, 2023.