(Queues): New chapter.
[bpt/guile.git] / doc / ref / misc-modules.texi
1 @page
2 @node Pretty Printing
3 @chapter Pretty Printing
4
5 @c FIXME::martin: Review me!
6
7 @cindex pretty printing
8 The module @code{(ice-9 pretty-print)} provides the procedure
9 @code{pretty-print}, which provides nicely formatted output of Scheme
10 objects. This is especially useful for deeply nested or complex data
11 structures, such as lists and vectors.
12
13 The module is loaded by simply saying.
14
15 @lisp
16 (use-modules (ice-9 pretty-print))
17 @end lisp
18
19 This makes the procedure @code{pretty-print} available. As an example
20 how @code{pretty-print} will format the output, see the following:
21
22 @lisp
23 (pretty-print '(define (foo) (lambda (x)
24 (cond ((zero? x) #t) ((negative? x) -x) (else
25 (if (= x 1) 2 (* x x x)))))))
26 @print{}
27 (define (foo)
28 (lambda (x)
29 (cond ((zero? x) #t)
30 ((negative? x) -x)
31 (else (if (= x 1) 2 (* x x x))))))
32 @end lisp
33
34 @deffn {Scheme Procedure} pretty-print obj [port] [keyword-options]
35 Print the textual representation of the Scheme object @var{obj} to
36 @var{port}. @var{port} defaults to the current output port, if not
37 given.
38
39 The further @var{keyword-options} are keywords and parameters as
40 follows,
41
42 @table @asis
43 @item @nicode{#:display?} @var{flag}
44 If @var{flag} is true then print using @code{display}. The default is
45 @code{#f} which means use @code{write} style. (@pxref{Writing})
46
47 @item @nicode{#:per-line-prefix} @var{string}
48 Print the given @var{string} as a prefix on each line. The default is
49 no prefix.
50
51 @item @nicode{#:width} @var{columns}
52 Print within the given @var{columns}. The default is 79.
53 @end table
54 @end deffn
55
56 Beware: Since @code{pretty-print} uses it's own write procedure, it's
57 output will not be the same as for example the output of @code{write}.
58 Consider the following example.
59
60 @lisp
61 (write (lambda (x) x))
62 @print{}
63 #<procedure #f (x)>
64
65 (pretty-print (lambda (x) x))
66 @print{}
67 #[procedure]
68 @end lisp
69
70 The reason is that @code{pretty-print} does not know as much about
71 Guile's object types as the builtin procedures. This is particularly
72 important for smobs, for which a write procedure can be defined and be
73 used by @code{write}, but not by @code{pretty-print}.
74
75
76 @page
77 @node Formatted Output
78 @chapter Formatted Output
79
80 @c FIXME::martin: Review me!
81
82 @cindex format
83 @cindex formatted output
84 Outputting messages or other texts which are composed of literal
85 strings, variable contents, newlines and other formatting can be
86 cumbersome, when only the standard procedures like @code{display},
87 @code{write} and @code{newline} are available. Additionally, one
88 often wants to collect the output in strings. With the standard
89 routines, the user is required to set up a string port, add this port
90 as a parameter to the output procedure calls and then retrieve the
91 resulting string from the string port.
92
93 The @code{format} procedure, to be found in module @code{(ice-9
94 format)}, can do all this, and even more. If you are a C programmer,
95 you can think of this procedure as Guile's @code{fprintf}.
96
97 @deffn {Scheme Procedure} format destination format-string args @dots{}
98 The first parameter is the @var{destination}, it determines where the
99 output of @code{format} will go.
100
101 @table @asis
102 @item @code{#t}
103 Send the formatted output to the current output port and return
104 @code{#t}.
105
106 @item @code{#f}
107 Return the formatted output as a string.
108
109 @item Any number value
110 Send the formatted output to the current error port and return
111 @code{#t}.
112
113 @item A valid output port
114 Send the formatted output to the port @var{destination} and return
115 @code{#t}.
116 @end table
117
118 The second parameter is the format string. It has a similar function
119 to the format string in calls to @code{printf} or @code{fprintf} in C.
120 It is output to the specified destination, but all escape sequences
121 are replaced by the results of formatting the corresponding sequence.
122
123 Note that escape sequences are marked with the character @code{~}
124 (tilde), and not with a @code{%} (percent sign), as in C.
125
126 The escape sequences in the following table are supported. When there
127 appears ``corresponding @var{arg}', that means any of the additional
128 arguments, after dropping all arguments which have been used up by
129 escape sequences which have been processed earlier. Some of the
130 format characters (the characters following the tilde) can be prefixed
131 by @code{:}, @code{@@}, or @code{:@@}, to modify the behaviour of the
132 format character. How the modified behaviour differs from the default
133 behaviour is described for every character in the table where
134 appropriate.
135
136 @table @code
137 @item ~~
138 Output a single @code{~} (tilde) character.
139
140 @item ~%
141 Output a newline character, thus advancing to the next output line.
142
143 @item ~&
144 Start a new line, that is, output a newline character if not already
145 at the start of a line.
146
147 @item ~_
148 Output a single space character.
149
150 @item ~/
151 Output a single tabulator character.
152
153 @item ~|
154 Output a page separator (formfeed) character.
155
156 @item ~t
157 Advance to the next tabulator position.
158
159 @item ~y
160 Pretty-print the corresponding @var{arg}.
161
162 @item ~a
163 Output the corresponding @var{arg} like @code{display}.
164
165 @item ~s
166 Output the corresponding @var{arg} like @code{write}.
167
168 @item ~d
169 Output the corresponding @var{arg} as a decimal number.
170
171 @item ~x
172 Output the corresponding @var{arg} as a hexadecimal number.
173
174 @item ~o
175 Output the corresponding @var{arg} as an octal number.
176
177 @item ~b
178 Output the corresponding @var{arg} as a binary number.
179
180 @item ~r
181 Output the corresponding @var{arg} as a number word, e.g. 10 prints as
182 @code{ten}. If prefixed with @code{:}, @code{tenth} is printed, if
183 prefixed with @code{:@@}, Roman numbers are printed.
184
185 @item ~f
186 Output the corresponding @var{arg} as a fixed format floating point
187 number, such as @code{1.34}.
188
189 @item ~e
190 Output the corresponding @var{arg} in exponential notation, such as
191 @code{1.34E+0}.
192
193 @item ~g
194 This works either like @code{~f} or like @code{~e}, whichever produces
195 less characters to be written.
196
197 @item ~$
198 Like @code{~f}, but only with two digits after the decimal point.
199
200 @item ~i
201 Output the corresponding @var{arg} as a complex number.
202
203 @item ~c
204 Output the corresponding @var{arg} as a character. If prefixed with
205 @code{@@}, it is printed like with @code{write}. If prefixed with
206 @code{:}, control characters are treated specially, for example
207 @code{#\newline} will be printed as @code{^J}.
208
209 @item ~p
210 ``Plural''. If the corresponding @var{arg} is 1, nothing is printed
211 (or @code{y} if prefixed with @code{@@} or @code{:@@}), otherwise
212 @code{s} is printed (or @code{ies} if prefixed with @code{@@} or
213 @code{:@@}).
214
215 @item ~?, ~k
216 Take the corresponding argument as a format string, and the following
217 argument as a list of values. Then format the values with respect to
218 the format string.
219
220 @item ~!
221 Flush the output to the output port.
222
223 @item ~#\newline (tilde-newline)
224 @c FIXME::martin: I don't understand this from the source.
225 Continuation lines.
226
227 @item ~*
228 Argument jumping. Navigate in the argument list as specified by the
229 corresponding argument. If prefixed with @code{:}, jump backwards in
230 the argument list, if prefixed by @code{:@@}, jump to the parameter
231 with the absolute index, otherwise jump forward in the argument list.
232
233 @item ~(
234 Case conversion begin. If prefixed by @code{:}, the following output
235 string will be capitalized, if prefixed by @code{@@}, the first
236 character will be capitalized, if prefixed by @code{:@@} it will be
237 upcased and otherwise it will be downcased. Conversion stops when the
238 ``Case conversion end'' @code{~)}sequence is encountered.
239
240 @item ~)
241 Case conversion end. Stop any case conversion currently in effect.
242
243 @item ~[
244 @c FIXME::martin: I don't understand this from the source.
245 Conditional begin.
246
247 @item ~;
248 @c FIXME::martin: I don't understand this from the source.
249 Conditional separator.
250
251 @item ~]
252 @c FIXME::martin: I don't understand this from the source.
253 Conditional end.
254
255 @item ~@{
256 @c FIXME::martin: I don't understand this from the source.
257 Iteration begin.
258
259 @item ~@}
260 @c FIXME::martin: I don't understand this from the source.
261 Iteration end.
262
263 @item ~^
264 @c FIXME::martin: I don't understand this from the source.
265 Up and out.
266
267 @item ~'
268 @c FIXME::martin: I don't understand this from the source.
269 Character parameter.
270
271 @item ~0 @dots{} ~9, ~-, ~+
272 @c FIXME::martin: I don't understand this from the source.
273 Numeric parameter.
274
275 @item ~v
276 @c FIXME::martin: I don't understand this from the source.
277 Variable parameter from next argument.
278
279 @item ~#
280 Parameter is number of remaining args. The number of the remaining
281 arguments is prepended to the list of unprocessed arguments.
282
283 @item ~,
284 @c FIXME::martin: I don't understand this from the source.
285 Parameter separators.
286
287 @item ~q
288 Inquiry message. Insert a copyright message into the output.
289 @end table
290
291 If any type conversions should fail (for example when using an escape
292 sequence for number output, but the argument is a string), an error
293 will be signalled.
294 @end deffn
295
296 You may have noticed that Guile contains a @code{format} procedure
297 even when the module @code{(ice-9 format)} is not loaded. The default
298 @code{format} procedure does not support all escape sequences
299 documented in this chapter, and will signal an error if you try to use
300 one of them. The reason for providing two versions of @code{format}
301 is that the full-featured module is fairly large and requires some
302 time to get loaded. So the Guile maintainers decided not to load the
303 large version of @code{format} by default, so that the start-up time
304 of the interpreter is not unnecessarily increased.
305
306
307 @page
308 @node Rx Regexps
309 @chapter The Rx Regular Expression Library
310
311 [FIXME: this is taken from Gary and Mark's quick summaries and should be
312 reviewed and expanded. Rx is pretty stable, so could already be done!]
313
314 @cindex rx
315 @cindex finite automaton
316
317 The @file{guile-lang-allover} package provides an interface to Tom
318 Lord's Rx library (currently only to POSIX regular expressions). Use of
319 the library requires a two step process: compile a regular expression
320 into an efficient structure, then use the structure in any number of
321 string comparisons.
322
323 For example, given the regular expression @samp{abc.} (which matches any
324 string containing @samp{abc} followed by any single character):
325
326 @smalllisp
327 guile> @kbd{(define r (regcomp "abc."))}
328 guile> @kbd{r}
329 #<rgx abc.>
330 guile> @kbd{(regexec r "abc")}
331 #f
332 guile> @kbd{(regexec r "abcd")}
333 #((0 . 4))
334 guile>
335 @end smalllisp
336
337 The definitions of @code{regcomp} and @code{regexec} are as follows:
338
339 @deffn {Scheme Procedure} regcomp pattern [flags]
340 Compile the regular expression pattern using POSIX rules. Flags is
341 optional and should be specified using symbolic names:
342 @defvar REG_EXTENDED
343 use extended POSIX syntax
344 @end defvar
345 @defvar REG_ICASE
346 use case-insensitive matching
347 @end defvar
348 @defvar REG_NEWLINE
349 allow anchors to match after newline characters in the
350 string and prevents @code{.} or @code{[^...]} from matching newlines.
351 @end defvar
352
353 The @code{logior} procedure can be used to combine multiple flags.
354 The default is to use
355 POSIX basic syntax, which makes @code{+} and @code{?} literals and @code{\+}
356 and @code{\?}
357 operators. Backslashes in @var{pattern} must be escaped if specified in a
358 literal string e.g., @code{"\\(a\\)\\?"}.
359 @end deffn
360
361 @deffn {Scheme Procedure} regexec regex string [match-pick] [flags]
362 Match @var{string} against the compiled POSIX regular expression
363 @var{regex}.
364 @var{match-pick} and @var{flags} are optional. Possible flags (which can be
365 combined using the logior procedure) are:
366
367 @defvar REG_NOTBOL
368 The beginning of line operator won't match the beginning of
369 @var{string} (presumably because it's not the beginning of a line)
370 @end defvar
371
372 @defvar REG_NOTEOL
373 Similar to REG_NOTBOL, but prevents the end of line operator
374 from matching the end of @var{string}.
375 @end defvar
376
377 If no match is possible, regexec returns #f. Otherwise @var{match-pick}
378 determines the return value:
379
380 @code{#t} or unspecified: a newly-allocated vector is returned,
381 containing pairs with the indices of the matched part of @var{string} and any
382 substrings.
383
384 @code{""}: a list is returned: the first element contains a nested list
385 with the matched part of @var{string} surrounded by the the unmatched parts.
386 Remaining elements are matched substrings (if any). All returned
387 substrings share memory with @var{string}.
388
389 @code{#f}: regexec returns #t if a match is made, otherwise #f.
390
391 vector: the supplied vector is returned, with the first element replaced
392 by a pair containing the indices of the matched portion of @var{string} and
393 further elements replaced by pairs containing the indices of matched
394 substrings (if any).
395
396 list: a list will be returned, with each member of the list
397 specified by a code in the corresponding position of the supplied list:
398
399 a number: the numbered matching substring (0 for the entire match).
400
401 @code{#\<}: the beginning of @var{string} to the beginning of the part matched
402 by regex.
403
404 @code{#\>}: the end of the matched part of @var{string} to the end of
405 @var{string}.
406
407 @code{#\c}: the "final tag", which seems to be associated with the "cut
408 operator", which doesn't seem to be available through the posix
409 interface.
410
411 e.g., @code{(list #\< 0 1 #\>)}. The returned substrings share memory with
412 @var{string}.
413 @end deffn
414
415 Here are some other procedures that might be used when using regular
416 expressions:
417
418 @deffn {Scheme Procedure} compiled-regexp? obj
419 Test whether obj is a compiled regular expression.
420 @end deffn
421
422 @deffn {Scheme Procedure} regexp->dfa regex [flags]
423 @end deffn
424
425 @deffn {Scheme Procedure} dfa-fork dfa
426 @end deffn
427
428 @deffn {Scheme Procedure} reset-dfa! dfa
429 @end deffn
430
431 @deffn {Scheme Procedure} dfa-final-tag dfa
432 @end deffn
433
434 @deffn {Scheme Procedure} dfa-continuable? dfa
435 @end deffn
436
437 @deffn {Scheme Procedure} advance-dfa! dfa string
438 @end deffn
439
440
441 @node File Tree Walk
442 @chapter File Tree Walk
443 @cindex file tree walk
444
445 The functions in this section traverse a tree of files and
446 directories, in a fashion similar to the C @code{ftw} and @code{nftw}
447 routines (@pxref{Working with Directory Trees,,, libc, GNU C Library
448 Reference Manual}).
449
450 @example
451 (use-modules (ice-9 ftw))
452 @end example
453 @sp 1
454
455 @defun ftw startname proc ['hash-size n]
456 Walk the filesystem tree descending from @var{startname}, calling
457 @var{proc} for each file and directory.
458
459 Hard links and symbolic links are followed. A file or directory is
460 reported to @var{proc} only once, and skipped if seen again in another
461 place. One consequence of this is that @code{ftw} is safe against
462 circularly linked directory structures.
463
464 Each @var{proc} call is @code{(@var{proc} filename statinfo flag)} and
465 it should return @code{#t} to continue, or any other value to stop.
466
467 @var{filename} is the item visited, being @var{startname} plus a
468 further path and the name of the item. @var{statinfo} is the return
469 from @code{stat} (@pxref{File System}) on @var{filename}. @var{flag}
470 is one of the following symbols,
471
472 @table @code
473 @item regular
474 @var{filename} is a file, this includes special files like devices,
475 named pipes, etc.
476
477 @item directory
478 @var{filename} is a directory.
479
480 @item invalid-stat
481 An error occurred when calling @code{stat}, so nothing is known.
482 @var{statinfo} is @code{#f} in this case.
483
484 @item directory-not-readable
485 @var{filename} is a directory, but one which cannot be read and hence
486 won't be recursed into.
487
488 @item symlink
489 @var{filename} is a dangling symbolic link. Symbolic links are
490 normally followed and their target reported, the link itself is
491 reported if the target does not exist.
492 @end table
493
494 The return value from @code{ftw} is @code{#t} if it ran to completion,
495 or otherwise the non-@code{#t} value from @var{proc} which caused the
496 stop.
497
498 Optional argument symbol @code{hash-size} and an integer can be given
499 to set the size of the hash table used to track items already visited.
500 (@pxref{Hash Table Reference})
501
502 @c Actually, it's probably safe to escape from ftw, just need to
503 @c check it.
504 @c
505 In the current implementation, returning non-@code{#t} from @var{proc}
506 is the only valid way to terminate @code{ftw}. @var{proc} must not
507 use @code{throw} or similar to escape.
508 @end defun
509
510
511 @defun nftw startname proc ['chdir] ['depth] ['hash-size n] ['mount] ['physical]
512 Walk the filesystem tree starting at @var{startname}, calling
513 @var{proc} for each file and directory. @code{nftw} has extra
514 features over the basic @code{ftw} described above.
515
516 Hard links and symbolic links are followed, but a file or directory is
517 reported to @var{proc} only once, and skipped if seen again in another
518 place. One consequence of this is that @code{nftw} is safe against
519 circular linked directory structures.
520
521 Each @var{proc} call is @code{(@var{proc} filename statinfo flag
522 basename level)} and it should return @code{#t} to continue, or any
523 other value to stop.
524
525 @var{filename} is the item visited, being @var{startname} plus a
526 further path and the name of the item. @var{statinfo} is the return
527 from @code{stat} on @var{filename} (@pxref{File System}).
528 @var{basename} it the item name without any path. @var{level} is an
529 integer giving the directory nesting level, starting from 0 for the
530 contents of @var{startname} (or that item itself if it's a file).
531 @var{flag} is one of the following symbols,
532
533 @table @code
534 @item regular
535 @var{filename} is a file, this includes special files like devices,
536 named pipes, etc.
537
538 @item directory
539 @var{filename} is a directory.
540
541 @item directory-processed
542 @var{filename} is a directory, and its contents have all been visited.
543 This flag is given instead of @code{directory} when the @code{depth}
544 option below is used.
545
546 @item invalid-stat
547 An error occurred when applying @code{stat} to @var{filename}, so
548 nothing is known about it. @var{statinfo} is @code{#f} in this case.
549
550 @item directory-not-readable
551 @var{filename} is a directory, but one which cannot be read and hence
552 won't be recursed into.
553
554 @item symlink
555 @var{filename} is a dangling symbolic link. Symbolic links are
556 normally followed and their target reported, the link itself is
557 reported if the target does not exist.
558
559 Under the @code{physical} option described below, @code{symlink} is
560 instead given for symbolic links whose target does exist.
561
562 @item stale-symlink
563 Under the @code{physical} option described below, this indicates
564 @var{filename} is a dangling symbolic link, meaning its target does
565 not exist. Without the @code{physical} option plain @code{symlink}
566 indicates this.
567 @end table
568
569 The following optional arguments can be given to modify the way
570 @code{nftw} works. Each is passed as a symbol (and @code{hash-size}
571 takes a following integer value).
572
573 @table @asis
574 @item @code{chdir}
575 Change to the directory containing the item before calling @var{proc}.
576 When @code{nftw} returns the original current directory is restored.
577
578 Under this option, generally the @var{basename} parameter should be
579 used to access the item in each @var{proc} call. The @var{filename}
580 parameter still has a path as normal and this will only be valid if
581 the @var{startname} directory was absolute.
582
583 @item @code{depth}
584 Visit files ``depth first'', meaning @var{proc} is called for the
585 contents of each directory before it's called for the directory
586 itself. Normally a directory is reported first, then its contents.
587
588 Under this option, the @var{flag} to @var{proc} for a directory is
589 @code{directory-processed} instead of @code{directory}.
590
591 @item @code{hash-size @var{n}}
592 Set the size of the hash table used to track items already visited.
593 (@pxref{Hash Table Reference})
594
595 @item @code{mount}
596 Don't cross a mount point, meaning only visit items on the same
597 filesystem as @var{startname}. (Ie.@: the same @code{stat:dev}.)
598
599 @item @code{physical}
600 Don't follow symbolic links, instead report them to @var{proc} as
601 @code{symlink}, and report dangling links as @code{stale-symlink}.
602 @end table
603
604 The return value from @code{nftw} is @code{#t} if it ran to
605 completion, or otherwise the non-@code{#t} value from @var{proc} which
606 caused the stop.
607
608 @c For reference, one reason not to esacpe is that the current
609 @c directory is not saved and restored with dynamic-wind. Maybe
610 @c changing that would be enough to allow escaping.
611 @c
612 In the current implementation, returning non-@code{#t} from @var{proc}
613 is the only valid way to terminate @code{ftw}. @var{proc} must not
614 use @code{throw} or similar to escape.
615 @end defun
616
617
618 @node Queues
619 @chapter Queues
620 @cindex Queues
621 @tindex Queues
622
623 @noindent
624 The functions in this section are provided by
625
626 @example
627 (use-modules (ice-9 q))
628 @end example
629
630 This module implements queues holding arbitrary scheme objects and
631 designed for efficient first-in / first-out operations.
632
633 @code{make-q} creates a queue, and objects are entered and removed
634 with @code{enq!} and @code{deq!}. @code{q-push!} and @code{q-pop!}
635 can be used too, treating the front of the queue like a stack.
636
637 @sp 1
638
639 @deffn {Scheme Procedure} make-q
640 Return a new queue.
641 @end deffn
642
643 @deffn {Scheme Procedure} q? obj
644 Return @code{#t} if @var{obj} is a queue, or @code{#f} if not.
645
646 Note that queues are not a distinct class of objects but are
647 implemented with cons cells. For that reason certain list structures
648 can get @code{#t} from @code{q?}.
649 @end deffn
650
651 @deffn {Scheme Procedure} enq! q obj
652 Add @var{obj} to the rear of @var{q}, and return @var{q}.
653 @end deffn
654
655 @deffn {Scheme Procedure} deq! q
656 @deffnx {Scheme Procedure} q-pop! q
657 Remove and return the front element from @var{q}. If @var{q} is
658 empty, a @code{q-empty} exception is thrown.
659
660 @code{deq!} and @code{q-pop!} are the same operation, the two names
661 just let an application match @code{enq!} with @code{deq!}, or
662 @code{q-push!} with @code{q-pop!}.
663 @end deffn
664
665 @deffn {Scheme Procedure} q-push! q obj
666 Add @var{obj} to the front of @var{q}, and return @var{q}.
667 @end deffn
668
669 @deffn {Scheme Procedure} q-length q
670 Return the number of elements in @var{q}.
671 @end deffn
672
673 @deffn {Scheme Procedure} q-empty? q
674 Return true if @var{q} is empty.
675 @end deffn
676
677 @deffn {Scheme Procedure} q-empty-check q
678 Throw a @code{q-empty} exception if @var{q} is empty.
679 @end deffn
680
681 @deffn {Scheme Procedure} q-front q
682 Return the first element of @var{q} (without removing it). If @var{q}
683 is empty, a @code{q-empty} exception is thrown.
684 @end deffn
685
686 @deffn {Scheme Procedure} q-rear q
687 Return the last element of @var{q} (without removing it). If @var{q}
688 is empty, a @code{q-empty} exception is thrown.
689 @end deffn
690
691 @deffn {Scheme Procedure} q-remove! q obj
692 Remove all occurences of @var{obj} from @var{q}, and return @var{q}.
693 @var{obj} is compared to queue elements using @code{eq?}.
694 @end deffn
695
696 @sp 1
697 @cindex @code{q-empty}
698 The @code{q-empty} exceptions described above are thrown just as
699 @code{(throw 'q-empty)}, there's no message etc like an error throw.
700
701 A queue is implemented as a cons cell, the @code{car} containing a
702 list of queued elements, and the @code{cdr} being the last cell in
703 that list (for ease of enqueuing).
704
705 @example
706 (@var{list} . @var{last-cell})
707 @end example
708
709 @noindent
710 If the queue is empty, @var{list} is the empty list and
711 @var{last-cell} is @code{#f}.
712
713 An application can directly access the queue list if desired, for
714 instance to search the elements or to insert at a specific point.
715
716 @deffn {Scheme Procedure} sync-q! q
717 Recompute the @var{last-cell} field in @var{q}.
718
719 All the operations above maintain @var{last-cell} as described, so
720 normally there's no need for @code{sync-q!}. But if an application
721 modifies the queue @var{list} then it must either maintain
722 @var{last-cell} similarly, or call @code{sync-q!} to recompute it.
723 @end deffn
724
725
726 @c Local Variables:
727 @c TeX-master: "guile.texi"
728 @c End: