Lisp provides various facilities for input/output (I/O) operations to interact with the user and external devices. Here's an overview of how Lisp handles I/O :
1. Standard I/O Streams : * Lisp provides three standard I/O streams: `
*standard-input*`, `
*standard-output*`, and `
*error-output*`. These streams are associated with the standard input, output, and error channels, respectively. They are used by default for I/O operations unless explicitly specified.
2. Reading Input : * The `
read` function is used to read input from a stream. It reads and returns the next Lisp object from the specified input stream. By default, `
read` reads from `
*standard-input*`. Common Lisp also provides the `
read-line` function to read a line of text as a string.
3. Writing Output : Lisp provides several functions for writing output to a stream:
* `
print` and `
prin1` functions convert Lisp objects to their printed representation and write them to a stream.
* `
princ` function writes the external representation of an object to a stream.
* `
format` function provides more control over formatting and allows the construction of complex output.
4. Output Formatting : * Lisp provides formatting directives and control strings in the `
format` function to control the formatting of output. This includes specifying field widths, precision, alignment, and other formatting options.
5. File I/O : * Lisp supports file I/O operations for reading and writing files. Common Lisp provides functions like `
open`, `
close`, `
read-line`, `
write-line`, `
read-byte`, and `
write-byte` for file handling. These functions allow you to open files, read and write data, and close files when finished.
6. Standard Error Output : * Error messages and other diagnostic information can be written to `
*error-output*` using functions like
`format` or `
write-line`. By default, `
*error-output*` is associated with the standard error channel.
7. Terminal Interaction : * Lisp provides functions like `
read`, `
read-char`, `
write-char`, and `
terpri` for interacting with the user on the terminal. These functions allow reading characters, writing characters, and moving to a new line.
8. Stream Handling : * Lisp provides functions and macros for stream handling, including querying stream properties, flushing output streams, positioning streams, and handling end-of-file conditions.