Macro with-open-stream

Syntax:

with-open-stream (var stream) {declaration}* {form}* {result}*

Arguments and Values:

var—a variable name.

stream—a form; evaluated to produce a stream.

declaration—a declare expression; not evaluated.

forms—an implicit progn.

results—the values returned by the forms.

Description:

with-open-stream performs a series of operations on stream, returns a value, and then closes the stream.

21.2.0 11Var is bound to the value of stream, and then forms are executed as an implicit progn. stream is automatically closed on exit from with-open-stream, no matter whether the exit is normal or abnormal. !!! Moon: I don't see how the following could possibly be true, since WITH-OPEN-STREAM does not create the stream. WITH-OPEN-FILE is different. On the other hand, this accurately reflects the cleanup and CLtL. KMP: I concur, but it will take a technical vote to fix it.The stream has dynamic extent; its extent ends when the form is exited.

The consequences are undefined if an attempt is made to assign the the variable var with the forms. The compiler may choose to issue a warning if such an attempt is detected.

Examples:

 (with-open-stream (s (make-string-input-stream "1 2 3 4"))
    (+ (read s) (read s) (read s))) → 6

Side Effects:

The stream is closed (upon exit).

Affected By:

None.

Exceptional Situations:

None.

See Also:

close

Notes:

None.