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.