Top Document: FAQ: Lisp Frequently Asked Questions 3/7 [Monthly posting] Previous Document: [3-13] Why does my program's behavior change each time I use it? Next Document: [3-15] I'm using DO to do some iteration, but it doesn't terminate. See reader questions & answers on this topic! - Help others by sharing your knowledge ~& vs ~% in FORMAT)? Where possible, it is desirable to write functions that produce output as building blocks. In contrast with other languages, which either conservatively force a newline at various times or require the program to keep track of whether it needs to force a newline, the Lisp I/O system keeps track of whether the most recently printed character was a newline or not. The function FRESH-LINE outputs a newline only if the stream is not already at the beginning of a line. TERPRI forces a newline irrespective of the current state of the stream. These correspond to the ~& and ~% FORMAT directives, respectively. (If the Lisp I/O system can't determine whether it's physically at the beginning of a line, it assumes that a newline is needed, just in case.) Thus, if you want formatted output to be on a line of its own, start it with ~& and end it with ~%. (Some people will use a ~& also at the end, but this isn't necessary, since we know a priori that we're not at the beginning of a line. The only exception is when ~& follows a ~A, to prevent a double newline when the argument to the ~A is a formatted string with a newline at the end.) For example, the following routine prints the elements of a list, N elements per line, and then prints the total number of elements on a new line: (defun print-list (list &optional (elements-per-line 10)) (fresh-line) (loop for i upfrom 1 for element in list do (format t "~A ~:[~;~%~]" element (zerop (mod i elements-per-line)))) (format t "~&~D~%" (length list))) User Contributions:Top Document: FAQ: Lisp Frequently Asked Questions 3/7 [Monthly posting] Previous Document: [3-13] Why does my program's behavior change each time I use it? Next Document: [3-15] I'm using DO to do some iteration, but it doesn't terminate. Part1 - Part2 - Part3 - Part4 - Part5 - Part6 - Part7 - Single Page [ Usenet FAQs | Web FAQs | Documents | RFC Index ] Send corrections/additions to the FAQ Maintainer: ai+lisp-faq@cs.cmu.edu
Last Update March 27 2014 @ 02:11 PM
|
Comment about this article, ask questions, or add new information about this topic: