mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-07-05 09:10:18 +02:00
* scripts.texi (Invoking Guile): Added docs for --use-srfi.
* expect.texi, repl-modules.texi: Start the chapters with a new page. * srfi-modules.texi (SRFI-0): Added note about supported feature identifiers and an example. Start the chapter with a new page. * srfi-modules.texi, scheme-data.texi, scheme-control.texi, scheme-binding.texi, repl-modules.texi, posix.texi, intro.texi, scheme-utility.texi: Change `--' to `-' throughout.
This commit is contained in:
parent
5f5850b38c
commit
fb02eb66f6
12 changed files with 91 additions and 484 deletions
|
@ -1,3 +1,17 @@
|
||||||
|
2001-05-15 Martin Grabmueller <mgrabmue@cs.tu-berlin.de>
|
||||||
|
|
||||||
|
* scripts.texi (Invoking Guile): Added docs for --use-srfi.
|
||||||
|
|
||||||
|
* expect.texi, repl-modules.texi: Start the chapters with a new
|
||||||
|
page.
|
||||||
|
|
||||||
|
* srfi-modules.texi (SRFI-0): Added note about supported feature
|
||||||
|
identifiers and an example. Start the chapter with a new page.
|
||||||
|
|
||||||
|
* srfi-modules.texi, scheme-data.texi, scheme-control.texi,
|
||||||
|
scheme-binding.texi, repl-modules.texi, posix.texi, intro.texi,
|
||||||
|
scheme-utility.texi: Change `--' to `-' throughout.
|
||||||
|
|
||||||
2001-05-14 Martin Grabmueller <mgrabmue@cs.tu-berlin.de>
|
2001-05-14 Martin Grabmueller <mgrabmue@cs.tu-berlin.de>
|
||||||
|
|
||||||
* srfi-13-14.texi: Removed.
|
* srfi-13-14.texi: Removed.
|
||||||
|
|
141
doc/expect.texi
141
doc/expect.texi
|
@ -1,141 +0,0 @@
|
||||||
@node Expect
|
|
||||||
@chapter Expect
|
|
||||||
|
|
||||||
The macros in this section are made available with:
|
|
||||||
|
|
||||||
@smalllisp
|
|
||||||
(use-modules (ice-9 expect))
|
|
||||||
@end smalllisp
|
|
||||||
|
|
||||||
@code{expect} is a macro for selecting actions based on the output from
|
|
||||||
a port. The name comes from a tool of similar functionality by Don Libes.
|
|
||||||
Actions can be taken when a particular string is matched, when a timeout
|
|
||||||
occurs, or when end-of-file is seen on the port. The @code{expect} macro
|
|
||||||
is described below; @code{expect-strings} is a front-end to @code{expect}
|
|
||||||
based on regexec (see the regular expression documentation).
|
|
||||||
|
|
||||||
@defmac expect-strings clause @dots{}
|
|
||||||
By default, @code{expect-strings} will read from the current input port.
|
|
||||||
The first term in each clause consists of an expression evaluating to
|
|
||||||
a string pattern (regular expression). As characters
|
|
||||||
are read one-by-one from the port, they are accumulated in a buffer string
|
|
||||||
which is matched against each of the patterns. When a
|
|
||||||
pattern matches, the remaining expression(s) in
|
|
||||||
the clause are evaluated and the value of the last is returned. For example:
|
|
||||||
|
|
||||||
@smalllisp
|
|
||||||
(with-input-from-file "/etc/passwd"
|
|
||||||
(lambda ()
|
|
||||||
(expect-strings
|
|
||||||
("^nobody" (display "Got a nobody user.\n")
|
|
||||||
(display "That's no problem.\n"))
|
|
||||||
("^daemon" (display "Got a daemon user.\n")))))
|
|
||||||
@end smalllisp
|
|
||||||
|
|
||||||
The regular expression is compiled with the @code{REG_NEWLINE} flag, so
|
|
||||||
that the ^ and $ anchors will match at any newline, not just at the start
|
|
||||||
and end of the string.
|
|
||||||
|
|
||||||
There are two other ways to write a clause:
|
|
||||||
|
|
||||||
The expression(s) to evaluate
|
|
||||||
can be omitted, in which case the result of the regular expression match
|
|
||||||
(converted to strings, as obtained from regexec with match-pick set to "")
|
|
||||||
will be returned if the pattern matches.
|
|
||||||
|
|
||||||
The symbol @code{=>} can be used to indicate that the expression is a
|
|
||||||
procedure which will accept the result of a successful regular expression
|
|
||||||
match. E.g.,
|
|
||||||
|
|
||||||
@smalllisp
|
|
||||||
("^daemon" => write)
|
|
||||||
("^d\\(aemon\\)" => (lambda args (for-each write args)))
|
|
||||||
("^da\\(em\\)on" => (lambda (all sub)
|
|
||||||
(write all) (newline)
|
|
||||||
(write sub) (newline)))
|
|
||||||
@end smalllisp
|
|
||||||
|
|
||||||
The order of the substrings corresponds to the order in which the
|
|
||||||
opening brackets occur.
|
|
||||||
|
|
||||||
A number of variables can be used to control the behaviour
|
|
||||||
of @code{expect} (and @code{expect-strings}).
|
|
||||||
Most have default top-level bindings to the value @code{#f},
|
|
||||||
which produces the default behaviour.
|
|
||||||
They can be redefined at the
|
|
||||||
top level or locally bound in a form enclosing the expect expression.
|
|
||||||
|
|
||||||
@table @code
|
|
||||||
@item expect-port
|
|
||||||
A port to read characters from, instead of the current input port.
|
|
||||||
@item expect-timeout
|
|
||||||
@code{expect} will terminate after this number of
|
|
||||||
seconds, returning @code{#f} or the value returned by expect-timeout-proc.
|
|
||||||
@item expect-timeout-proc
|
|
||||||
A procedure called if timeout occurs. The procedure takes a single argument:
|
|
||||||
the accumulated string.
|
|
||||||
@item expect-eof-proc
|
|
||||||
A procedure called if end-of-file is detected on the input port. The
|
|
||||||
procedure takes a single argument: the accumulated string.
|
|
||||||
@item expect-char-proc
|
|
||||||
A procedure to be called every time a character is read from the
|
|
||||||
port. The procedure takes a single argument: the character which was read.
|
|
||||||
@item expect-strings-compile-flags
|
|
||||||
Flags to be used when compiling a regular expression, which are passed
|
|
||||||
to @code{make-regexp} @xref{Regexp Functions}. The default value
|
|
||||||
is @code{regexp/newline}.
|
|
||||||
@item expect-strings-exec-flags
|
|
||||||
Flags to be used when executing a regular expression, which are
|
|
||||||
passed to regexp-exec @xref{Regexp Functions}.
|
|
||||||
The default value is @code{regexp/noteol}, which prevents @code{$}
|
|
||||||
from matching the end of the string while it is still accumulating,
|
|
||||||
but still allows it to match after a line break or at the end of file.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
Here's an example using all of the variables:
|
|
||||||
|
|
||||||
@smalllisp
|
|
||||||
(let ((expect-port (open-input-file "/etc/passwd"))
|
|
||||||
(expect-timeout 1)
|
|
||||||
(expect-timeout-proc
|
|
||||||
(lambda (s) (display "Times up!\n")))
|
|
||||||
(expect-eof-proc
|
|
||||||
(lambda (s) (display "Reached the end of the file!\n")))
|
|
||||||
(expect-char-proc display)
|
|
||||||
(expect-strings-compile-flags (logior regexp/newline regexp/icase))
|
|
||||||
(expect-strings-exec-flags 0))
|
|
||||||
(expect-strings
|
|
||||||
("^nobody" (display "Got a nobody user\n"))))
|
|
||||||
@end smalllisp
|
|
||||||
@end defmac
|
|
||||||
|
|
||||||
@defmac expect clause @dots{}
|
|
||||||
@code{expect} is used in the same way as @code{expect-strings},
|
|
||||||
but tests are specified not as patterns, but as procedures. The
|
|
||||||
procedures are called in turn after each character is read from the
|
|
||||||
port, with two arguments: the value of the accumulated string and
|
|
||||||
a flag to indicate whether end-of-file has been reached. The flag
|
|
||||||
will usually be @code{#f}, but if end-of-file is reached, the procedures
|
|
||||||
are called an additional time with the final accumulated string and
|
|
||||||
@code{#t}.
|
|
||||||
|
|
||||||
The test is successful if the procedure returns a non-false value.
|
|
||||||
|
|
||||||
If the @code{=>} syntax is used, then if the test succeeds it must return
|
|
||||||
a list containing the arguments to be provided to the corresponding
|
|
||||||
expression.
|
|
||||||
|
|
||||||
In the following example, a string will only be matched at the beginning
|
|
||||||
of the file:
|
|
||||||
|
|
||||||
@smalllisp
|
|
||||||
(let ((expect-port (open-input-file "/etc/passwd")))
|
|
||||||
(expect
|
|
||||||
((lambda (s eof?) (string=? s "fnord!"))
|
|
||||||
(display "Got a nobody user!\n"))))
|
|
||||||
@end smalllisp
|
|
||||||
|
|
||||||
The control variables described for @code{expect-strings} also
|
|
||||||
influence the behaviour of @code{expect}, with the exception of
|
|
||||||
variables whose names begin with @code{expect-strings-}.
|
|
||||||
@end defmac
|
|
|
@ -1,4 +1,4 @@
|
||||||
@c $Id: intro.texi,v 1.8 2001-05-13 19:14:41 ttn Exp $
|
@c $Id: intro.texi,v 1.9 2001-05-16 18:08:12 mgrabmue Exp $
|
||||||
|
|
||||||
@page
|
@page
|
||||||
@node What is Guile?
|
@node What is Guile?
|
||||||
|
@ -869,7 +869,7 @@ be a bug, unless this is explicitly documented.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
When some part of the documentation is not clear and does not make sense
|
When some part of the documentation is not clear and does not make sense
|
||||||
to you even after re--reading the section, it is a bug.
|
to you even after re-reading the section, it is a bug.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
When you write a bug report, please make sure to include as much of the
|
When you write a bug report, please make sure to include as much of the
|
||||||
|
@ -915,7 +915,7 @@ unmodified Guile. But if you've made modifications and you don't tell
|
||||||
us, you are sending us on a wild goose chase.)
|
us, you are sending us on a wild goose chase.)
|
||||||
|
|
||||||
Be precise about these changes. A description in English is not
|
Be precise about these changes. A description in English is not
|
||||||
enough--send a context diff for them.
|
enough---send a context diff for them.
|
||||||
|
|
||||||
Adding files of your own, or porting to another machine, is a
|
Adding files of your own, or porting to another machine, is a
|
||||||
modification of the source.
|
modification of the source.
|
||||||
|
@ -979,7 +979,7 @@ certain.
|
||||||
@item
|
@item
|
||||||
Additional information from a C debugger such as GDB might enable
|
Additional information from a C debugger such as GDB might enable
|
||||||
someone to find a problem on a machine which he does not have available.
|
someone to find a problem on a machine which he does not have available.
|
||||||
If you don't know how to use GDB, please read the GDB manual--it is not
|
If you don't know how to use GDB, please read the GDB manual---it is not
|
||||||
very long, and using GDB is easy. You can find the GDB distribution,
|
very long, and using GDB is easy. You can find the GDB distribution,
|
||||||
including the GDB manual in online form, in most of the same places you
|
including the GDB manual in online form, in most of the same places you
|
||||||
can find the Guile distribution. To run Guile under GDB, you should
|
can find the Guile distribution. To run Guile under GDB, you should
|
||||||
|
|
|
@ -2278,7 +2278,7 @@ the locale will be set using envirionment variables.
|
||||||
@section Encryption
|
@section Encryption
|
||||||
|
|
||||||
Please note that the procedures in this section are not suited for
|
Please note that the procedures in this section are not suited for
|
||||||
strong encryption, they are only interfaces to the well--known and
|
strong encryption, they are only interfaces to the well-known and
|
||||||
common system library functions of the same name. They are just as good
|
common system library functions of the same name. They are just as good
|
||||||
(or bad) as the underlying functions, so you should refer to your system
|
(or bad) as the underlying functions, so you should refer to your system
|
||||||
documentation before using them.
|
documentation before using them.
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
@page
|
||||||
@node Readline Support
|
@node Readline Support
|
||||||
@chapter Readline Support
|
@chapter Readline Support
|
||||||
|
|
||||||
|
@ -6,7 +7,7 @@
|
||||||
@cindex readline
|
@cindex readline
|
||||||
@cindex command line history
|
@cindex command line history
|
||||||
Guile comes with an interface module to the readline library. This
|
Guile comes with an interface module to the readline library. This
|
||||||
makes interactive use much more convenient, because of the command--line
|
makes interactive use much more convenient, because of the command-line
|
||||||
editing features of readline. Using @code{(ice-9 readline)}, you can
|
editing features of readline. Using @code{(ice-9 readline)}, you can
|
||||||
navigate through the current input line with the cursor keys, retrieve
|
navigate through the current input line with the cursor keys, retrieve
|
||||||
older command lines from the input history and even search through the
|
older command lines from the input history and even search through the
|
||||||
|
@ -43,10 +44,11 @@ navigating through the command line and history.
|
||||||
When you quit your Guile session by evaluating @code{(quit)} or pressing
|
When you quit your Guile session by evaluating @code{(quit)} or pressing
|
||||||
Ctrl-D, the history will be saved to the file @file{.guile_history} and
|
Ctrl-D, the history will be saved to the file @file{.guile_history} and
|
||||||
read in when you start Guile for the next time. Thus you can start a
|
read in when you start Guile for the next time. Thus you can start a
|
||||||
new Guile session and still have the (probably long--winded) definition
|
new Guile session and still have the (probably long-winded) definition
|
||||||
expressions available.
|
expressions available.
|
||||||
|
|
||||||
|
|
||||||
|
@page
|
||||||
@node Value History
|
@node Value History
|
||||||
@chapter Value History
|
@chapter Value History
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ Bindings}) act differently (@pxref{Internal Definitions}).
|
||||||
As opposed to definitions at the top level, which are visible in the
|
As opposed to definitions at the top level, which are visible in the
|
||||||
whole program (or current module, when Guile modules are used), it is
|
whole program (or current module, when Guile modules are used), it is
|
||||||
also possible to define variables which are only visible in a
|
also possible to define variables which are only visible in a
|
||||||
well--defined part of the program. Normally, this part of a program
|
well-defined part of the program. Normally, this part of a program
|
||||||
will be a procedure or a subexpression of a procedure.
|
will be a procedure or a subexpression of a procedure.
|
||||||
|
|
||||||
With the constructs for local binding (@code{let}, @code{let*} and
|
With the constructs for local binding (@code{let}, @code{let*} and
|
||||||
|
@ -83,7 +83,7 @@ using plain @code{let} is a bit inconvenient.
|
||||||
((@var{variable1} @var{init1}) @dots{})
|
((@var{variable1} @var{init1}) @dots{})
|
||||||
@end lisp
|
@end lisp
|
||||||
|
|
||||||
that is zero or more two--element lists of a variable and an arbitrary
|
that is zero or more two-element lists of a variable and an arbitrary
|
||||||
expression each. All @var{variable} names must be distinct.
|
expression each. All @var{variable} names must be distinct.
|
||||||
|
|
||||||
A @code{let} expression is evaluated as follows.
|
A @code{let} expression is evaluated as follows.
|
||||||
|
@ -179,9 +179,9 @@ peach
|
||||||
@end lisp
|
@end lisp
|
||||||
|
|
||||||
Here the enclosing form is a @code{let}, so the @code{define}s in the
|
Here the enclosing form is a @code{let}, so the @code{define}s in the
|
||||||
@code{let}--body are internal definitions. Because the scope of the
|
@code{let}-body are internal definitions. Because the scope of the
|
||||||
internal definitions is the @strong{complete} body of the
|
internal definitions is the @strong{complete} body of the
|
||||||
@code{let}--expression, the @code{lambda}--expression which gets bound
|
@code{let}-expression, the @code{lambda}-expression which gets bound
|
||||||
to the variable @code{banana} may refer to the variable @code{apple},
|
to the variable @code{banana} may refer to the variable @code{apple},
|
||||||
even thogh it's definition appears lexically @emph{after} the definition
|
even thogh it's definition appears lexically @emph{after} the definition
|
||||||
of @code{banana}. This is because a sequence of internal definition
|
of @code{banana}. This is because a sequence of internal definition
|
||||||
|
|
|
@ -39,13 +39,13 @@ expression below:
|
||||||
@end lisp
|
@end lisp
|
||||||
|
|
||||||
If the two calls to @code{display} and @code{newline} were not embedded
|
If the two calls to @code{display} and @code{newline} were not embedded
|
||||||
in a @code{begin}--statement, the call to @code{newline} would get
|
in a @code{begin}-statement, the call to @code{newline} would get
|
||||||
misinterpreted as the else--branch of the @code{if}--expression.
|
misinterpreted as the else-branch of the @code{if}-expression.
|
||||||
|
|
||||||
@deffn syntax begin expr1 expr2 @dots{}
|
@deffn syntax begin expr1 expr2 @dots{}
|
||||||
The expression(s) are evaluated in left--to--right order and the value
|
The expression(s) are evaluated in left-to-right order and the value
|
||||||
of the last expression is returned as the value of the
|
of the last expression is returned as the value of the
|
||||||
@code{begin}--expression. This expression type is used when the
|
@code{begin}-expression. This expression type is used when the
|
||||||
expressions before the last one are evaluated for their side effects.
|
expressions before the last one are evaluated for their side effects.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ expressions before the last one are evaluated for their side effects.
|
||||||
@cindex cond
|
@cindex cond
|
||||||
|
|
||||||
Guile provides three syntactic constructs for conditional evaluation.
|
Guile provides three syntactic constructs for conditional evaluation.
|
||||||
@code{if} is the normal if--then--else expression (with an optional else
|
@code{if} is the normal if-then-else expression (with an optional else
|
||||||
branch), @code{cond} is a conditional expression with multiple branches
|
branch), @code{cond} is a conditional expression with multiple branches
|
||||||
and @code{case} branches if an expression has one of a set of constant
|
and @code{case} branches if an expression has one of a set of constant
|
||||||
values.
|
values.
|
||||||
|
@ -98,13 +98,13 @@ where @var{expression} must evaluate to a procedure.
|
||||||
The @var{test}s of the clauses are evaluated in order and as soon as one
|
The @var{test}s of the clauses are evaluated in order and as soon as one
|
||||||
of them evaluates to a true values, the corresponding @var{expression}s
|
of them evaluates to a true values, the corresponding @var{expression}s
|
||||||
are evaluated in order and the last value is returned as the value of
|
are evaluated in order and the last value is returned as the value of
|
||||||
the @code{cond}--expression. For the @code{=>} clause type,
|
the @code{cond}-expression. For the @code{=>} clause type,
|
||||||
@var{expression} is evaluated and the resulting procedure is applied to
|
@var{expression} is evaluated and the resulting procedure is applied to
|
||||||
the value of @var{test}. The result of this procedure application is
|
the value of @var{test}. The result of this procedure application is
|
||||||
then the result of the @code{cond}--expression.
|
then the result of the @code{cond}-expression.
|
||||||
|
|
||||||
The @var{test} of the last @var{clause} may be the keyword @code{else}.
|
The @var{test} of the last @var{clause} may be the keyword @code{else}.
|
||||||
Then, if none of the preceding @var{test}s is true, the @var{expression}s following the @code{else} are evaluated to produce the result of the @code{cond}--expression.
|
Then, if none of the preceding @var{test}s is true, the @var{expression}s following the @code{else} are evaluated to produce the result of the @code{cond}-expression.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn syntax case key clause1 clause2 @dots{}
|
@deffn syntax case key clause1 clause2 @dots{}
|
||||||
|
@ -127,7 +127,7 @@ the @var{datum} are evaluated from left to right, returning the value of
|
||||||
the last expression as the result of the @code{case} expression.
|
the last expression as the result of the @code{case} expression.
|
||||||
|
|
||||||
If the @var{key} matches no @var{datum} and there is an
|
If the @var{key} matches no @var{datum} and there is an
|
||||||
@code{else}--clause, the expressions following the @code{else} are
|
@code{else}-clause, the expressions following the @code{else} are
|
||||||
evaluated. If there is no such clause, the result of the expression is
|
evaluated. If there is no such clause, the result of the expression is
|
||||||
unspecified.
|
unspecified.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
@ -204,11 +204,11 @@ is @code{#f} right from the start.
|
||||||
|
|
||||||
@cindex named let
|
@cindex named let
|
||||||
Another very common way of expressing iteration in Scheme programs is
|
Another very common way of expressing iteration in Scheme programs is
|
||||||
the use of the so--called @dfn{named let}.
|
the use of the so-called @dfn{named let}.
|
||||||
|
|
||||||
Named let is a variant of @code{let} which creates a procedure and calls
|
Named let is a variant of @code{let} which creates a procedure and calls
|
||||||
it in one step. Because of the newly created procedure, named let is
|
it in one step. Because of the newly created procedure, named let is
|
||||||
more powerful than @code{do}---it can be used for iteration, but also
|
more powerful than @code{do}--it can be used for iteration, but also
|
||||||
for arbitrary recursion.
|
for arbitrary recursion.
|
||||||
|
|
||||||
@deffn syntax let variable bindings body
|
@deffn syntax let variable bindings body
|
||||||
|
@ -310,7 +310,7 @@ called only one time. This can be confusing at times.
|
||||||
|
|
||||||
Scheme allows a procedure to return more than one value to its caller.
|
Scheme allows a procedure to return more than one value to its caller.
|
||||||
This is quite different to other languages which only allow
|
This is quite different to other languages which only allow
|
||||||
single--value returns. Returning multiple values is different from
|
single-value returns. Returning multiple values is different from
|
||||||
returning a list (or pair or vector) of values to the caller, because
|
returning a list (or pair or vector) of values to the caller, because
|
||||||
conceptionally not @emph{one} compound object is returned, but several
|
conceptionally not @emph{one} compound object is returned, but several
|
||||||
distinct values.
|
distinct values.
|
||||||
|
|
|
@ -1337,7 +1337,7 @@ Return the lowercase character version of @var{chr}.
|
||||||
@node Strings
|
@node Strings
|
||||||
@section Strings
|
@section Strings
|
||||||
|
|
||||||
Strings are fixed--length sequences of characters. They can be created
|
Strings are fixed-length sequences of characters. They can be created
|
||||||
by calling constructor procedures, but they can also literally get
|
by calling constructor procedures, but they can also literally get
|
||||||
entered at the REPL or in Scheme source files.
|
entered at the REPL or in Scheme source files.
|
||||||
|
|
||||||
|
@ -1345,11 +1345,11 @@ Guile provides a rich set of string processing procedures, because text
|
||||||
handling is very important when Guile is used as a scripting language.
|
handling is very important when Guile is used as a scripting language.
|
||||||
|
|
||||||
Strings always carry the information about how many characters they are
|
Strings always carry the information about how many characters they are
|
||||||
composed of with them, so there is no special end--of--string character,
|
composed of with them, so there is no special end-of-string character,
|
||||||
like in C. That means that Scheme strings can contain any character,
|
like in C. That means that Scheme strings can contain any character,
|
||||||
even the NUL character @code{'\0'}. But note: Since most operating
|
even the NUL character @code{'\0'}. But note: Since most operating
|
||||||
system calls dealing with strings (such as for file operations) expect
|
system calls dealing with strings (such as for file operations) expect
|
||||||
strings to be zero--terminated, they might do unexpected things when
|
strings to be zero-terminated, they might do unexpected things when
|
||||||
called with string containing unusal characters.
|
called with string containing unusal characters.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
|
@ -1507,7 +1507,7 @@ exact integers satisfying:
|
||||||
@node String Modification
|
@node String Modification
|
||||||
@subsection String Modification
|
@subsection String Modification
|
||||||
|
|
||||||
These procedures are for modifying strings in--place. That means, that
|
These procedures are for modifying strings in-place. That means, that
|
||||||
not a new string is the result of a string operation, but that the
|
not a new string is the result of a string operation, but that the
|
||||||
actual memory representation of a string is modified.
|
actual memory representation of a string is modified.
|
||||||
|
|
||||||
|
@ -1738,7 +1738,7 @@ the C library.
|
||||||
@node Alphabetic Case Mapping
|
@node Alphabetic Case Mapping
|
||||||
@subsection Alphabetic Case Mapping
|
@subsection Alphabetic Case Mapping
|
||||||
|
|
||||||
These are procedures for mapping strings to their upper-- or lower--case
|
These are procedures for mapping strings to their upper- or lower-case
|
||||||
equivalents, respectively, or for capitalizing strings.
|
equivalents, respectively, or for capitalizing strings.
|
||||||
|
|
||||||
@deffn primitive string-upcase str
|
@deffn primitive string-upcase str
|
||||||
|
@ -1810,7 +1810,7 @@ This section contains several remaining string procedures.
|
||||||
@deffn primitive string-ci->symbol str
|
@deffn primitive string-ci->symbol str
|
||||||
Return the symbol whose name is @var{str}. @var{str} is
|
Return the symbol whose name is @var{str}. @var{str} is
|
||||||
converted to lowercase before the conversion is done, if Guile
|
converted to lowercase before the conversion is done, if Guile
|
||||||
is currently reading symbols case--insensitively.
|
is currently reading symbols case-insensitively.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
|
||||||
|
@ -2292,13 +2292,13 @@ other they can be used as literal data as well.
|
||||||
The association between symbols and values is maintained in special data
|
The association between symbols and values is maintained in special data
|
||||||
structures, the symbol tables.
|
structures, the symbol tables.
|
||||||
|
|
||||||
In addition, Guile offers variables as first--class objects. They can
|
In addition, Guile offers variables as first-class objects. They can
|
||||||
be used for interacting with the module system.
|
be used for interacting with the module system.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Symbols:: All about symbols as a data type.
|
* Symbols:: All about symbols as a data type.
|
||||||
* Symbol Tables:: Tables for mapping symbols to values.
|
* Symbol Tables:: Tables for mapping symbols to values.
|
||||||
* Variables:: First--class variables.
|
* Variables:: First-class variables.
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Symbols
|
@node Symbols
|
||||||
|
@ -2398,7 +2398,7 @@ part of an object returned as the value of a literal expression
|
||||||
Report on Scheme}) or by a call to the @code{read} procedure,
|
Report on Scheme}) or by a call to the @code{read} procedure,
|
||||||
and its name contains alphabetic characters, then the string
|
and its name contains alphabetic characters, then the string
|
||||||
returned will contain characters in the implementation's
|
returned will contain characters in the implementation's
|
||||||
preferred standard case---some implementations will prefer
|
preferred standard case--some implementations will prefer
|
||||||
upper case, others lower case. If the symbol was returned by
|
upper case, others lower case. If the symbol was returned by
|
||||||
@code{string->symbol}, the case of characters in the string
|
@code{string->symbol}, the case of characters in the string
|
||||||
returned will be the same as the case in the string that was
|
returned will be the same as the case in the string that was
|
||||||
|
@ -2535,7 +2535,7 @@ Variables do not have a read syntax, they have to be created by calling
|
||||||
one of the constructor procedures @code{make-variable} or
|
one of the constructor procedures @code{make-variable} or
|
||||||
@code{make-undefined-variable} or retrieved by @code{builtin-variable}.
|
@code{make-undefined-variable} or retrieved by @code{builtin-variable}.
|
||||||
|
|
||||||
First--class variables are especially useful for interacting with the
|
First-class variables are especially useful for interacting with the
|
||||||
current module system (REFFIXME).
|
current module system (REFFIXME).
|
||||||
|
|
||||||
@deffn primitive builtin-variable name
|
@deffn primitive builtin-variable name
|
||||||
|
@ -2976,7 +2976,7 @@ applications (REFFIXME).
|
||||||
@c FIXME::martin: Review me!
|
@c FIXME::martin: Review me!
|
||||||
|
|
||||||
Often it is useful to test whether a given Scheme object is a list or
|
Often it is useful to test whether a given Scheme object is a list or
|
||||||
not. List--processing procedures could use this information to test
|
not. List-processing procedures could use this information to test
|
||||||
whether their input is valid, or they could do different things
|
whether their input is valid, or they could do different things
|
||||||
depending on the datatype of their arguments.
|
depending on the datatype of their arguments.
|
||||||
|
|
||||||
|
@ -2985,7 +2985,7 @@ depending on the datatype of their arguments.
|
||||||
Return @code{#t} iff @var{x} is a proper list, else @code{#f}.
|
Return @code{#t} iff @var{x} is a proper list, else @code{#f}.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
The predicate @code{null?} is often used in list--processing code to
|
The predicate @code{null?} is often used in list-processing code to
|
||||||
tell whether a given list has run out of elements. That is, a loop
|
tell whether a given list has run out of elements. That is, a loop
|
||||||
somehow deals with the elements of a list until the list satisfies
|
somehow deals with the elements of a list until the list satisfies
|
||||||
@code{null?}. Then, teh algorithm terminates.
|
@code{null?}. Then, teh algorithm terminates.
|
||||||
|
@ -3079,7 +3079,7 @@ lists in order to form a new list. @code{reverse} and @code{reverse!}
|
||||||
return lists with the same elements as their arguments, but in reverse
|
return lists with the same elements as their arguments, but in reverse
|
||||||
order. The procedure variants with an @code{!} directly modify the
|
order. The procedure variants with an @code{!} directly modify the
|
||||||
pairs which form the list, whereas the other procedures create new
|
pairs which form the list, whereas the other procedures create new
|
||||||
pairs. This is why you should be careful when using the side--effecting
|
pairs. This is why you should be careful when using the side-effecting
|
||||||
variants.
|
variants.
|
||||||
|
|
||||||
@rnindex append
|
@rnindex append
|
||||||
|
@ -4978,7 +4978,7 @@ a hook with @code{add-hook!} or removed with @code{remove-hook!} or
|
||||||
@subsection Hook Examples
|
@subsection Hook Examples
|
||||||
|
|
||||||
Hook usage is shown by some examples in this section. First, we will
|
Hook usage is shown by some examples in this section. First, we will
|
||||||
define a hook of arity 2---that is, the procedures stored in the hook
|
define a hook of arity 2 --- that is, the procedures stored in the hook
|
||||||
will have to accept two arguments.
|
will have to accept two arguments.
|
||||||
|
|
||||||
@lisp
|
@lisp
|
||||||
|
|
|
@ -65,7 +65,7 @@ The procedure takes any number of arguments; when the procedure is
|
||||||
called, the sequence of actual arguments will converted into a list and
|
called, the sequence of actual arguments will converted into a list and
|
||||||
stored into the newly created location for the formal variable.
|
stored into the newly created location for the formal variable.
|
||||||
@item (@var{variable1} @dots{} @var{variablen} . @var{variablen+1})
|
@item (@var{variable1} @dots{} @var{variablen} . @var{variablen+1})
|
||||||
If a space--delimited period precedes the last variable, then the
|
If a space-delimited period precedes the last variable, then the
|
||||||
procedure takes @var{n} or more variablesm where @var{n} is the number
|
procedure takes @var{n} or more variablesm where @var{n} is the number
|
||||||
of formal arguments before the period. There must be at least one
|
of formal arguments before the period. There must be at least one
|
||||||
argument before the period. The first @var{n} actual arguments will be
|
argument before the period. The first @var{n} actual arguments will be
|
||||||
|
@ -432,7 +432,7 @@ Return the source property specified by @var{key} from
|
||||||
A @dfn{procedure with setter} is a special kind of procedure which
|
A @dfn{procedure with setter} is a special kind of procedure which
|
||||||
normally behaves like any accesor procedure, that is a procedure which
|
normally behaves like any accesor procedure, that is a procedure which
|
||||||
accesses a data structure. The difference is that this kind of
|
accesses a data structure. The difference is that this kind of
|
||||||
procedure has a so--called @dfn{setter} attached, which is a procedure
|
procedure has a so-called @dfn{setter} attached, which is a procedure
|
||||||
for storing something into a data structure.
|
for storing something into a data structure.
|
||||||
|
|
||||||
Procedures with setters are treated specially when the procedure appears
|
Procedures with setters are treated specially when the procedure appears
|
||||||
|
|
|
@ -1,295 +0,0 @@
|
||||||
@page
|
|
||||||
@node Utility Functions
|
|
||||||
@chapter General Utility Functions
|
|
||||||
|
|
||||||
@c FIXME::martin: Review me!
|
|
||||||
|
|
||||||
This chapter contains information about procedures which are not cleanly
|
|
||||||
tied to a specific data type. Because of their wide range of
|
|
||||||
applications, they are collected in a @dfn{utlity} chapter.
|
|
||||||
|
|
||||||
@menu
|
|
||||||
* Equality:: When are two values `the same'?
|
|
||||||
* Property Lists:: Managing metainformation about Scheme objects.
|
|
||||||
* Primitive Properties:: A modern low-level interface to object properties.
|
|
||||||
* Sorting:: Sort utility procedures.
|
|
||||||
* Copying:: Copying deep structures.
|
|
||||||
* General Conversion:: Converting objects to strings.
|
|
||||||
@end menu
|
|
||||||
|
|
||||||
|
|
||||||
@node Equality
|
|
||||||
@section Equality
|
|
||||||
|
|
||||||
@c FIXME::martin: Review me!
|
|
||||||
|
|
||||||
@cindex sameness
|
|
||||||
@cindex equality
|
|
||||||
|
|
||||||
Three different kinds of @dfn{sameness} are defined in Scheme.
|
|
||||||
|
|
||||||
@itemize @bullet
|
|
||||||
@item
|
|
||||||
Two values can refer to exactly the same object.
|
|
||||||
|
|
||||||
@item
|
|
||||||
Two objects can have the same @dfn{value}.
|
|
||||||
|
|
||||||
@item
|
|
||||||
Two objects can be structurally equivalent.
|
|
||||||
@end itemize
|
|
||||||
|
|
||||||
The differentiation between these three kinds is important, because
|
|
||||||
determining whether two values are the same objects is very efficient,
|
|
||||||
while determining structural equivalence can be quite expensive
|
|
||||||
(consider comparing two very long lists). Therefore, three different
|
|
||||||
procedures for testing for equality are provided, which correspond to
|
|
||||||
the three kinds of @dfn{sameness} defined above.
|
|
||||||
|
|
||||||
@rnindex eq?
|
|
||||||
@deffn primitive eq? x y
|
|
||||||
Return @code{#t} iff @var{x} references the same object as @var{y}.
|
|
||||||
@code{eq?} is similar to @code{eqv?} except that in some cases it is
|
|
||||||
capable of discerning distinctions finer than those detectable by
|
|
||||||
@code{eqv?}.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@rnindex eqv?
|
|
||||||
@deffn primitive eqv? x y
|
|
||||||
The @code{eqv?} procedure defines a useful equivalence relation on objects.
|
|
||||||
Briefly, it returns @code{#t} if @var{x} and @var{y} should normally be
|
|
||||||
regarded as the same object. This relation is left slightly open to
|
|
||||||
interpretation, but works for comparing immediate integers, characters,
|
|
||||||
and inexact numbers.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@rnindex equal?
|
|
||||||
@deffn primitive equal? x y
|
|
||||||
Return @code{#t} iff @var{x} and @var{y} are recursively @code{eqv?} equivalent.
|
|
||||||
@code{equal?} recursively compares the contents of pairs,
|
|
||||||
vectors, and strings, applying @code{eqv?} on other objects such as
|
|
||||||
numbers and symbols. A rule of thumb is that objects are generally
|
|
||||||
@code{equal?} if they print the same. @code{equal?} may fail to
|
|
||||||
terminate if its arguments are circular data structures.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
|
|
||||||
@node Property Lists
|
|
||||||
@section Property Lists
|
|
||||||
|
|
||||||
Every object in the system can have a @dfn{property list} that may
|
|
||||||
be used for information about that object. For example, a
|
|
||||||
function may have a property list that includes information about
|
|
||||||
the source file in which it is defined.
|
|
||||||
|
|
||||||
Property lists are implemented as assq lists (@pxref{Association Lists}).
|
|
||||||
|
|
||||||
Currently, property lists are implemented differently for procedures and
|
|
||||||
closures than for other kinds of objects. Therefore, when manipulating
|
|
||||||
a property list associated with a procedure object, use the
|
|
||||||
@code{procedure} functions; otherwise, use the @code{object} functions.
|
|
||||||
|
|
||||||
@deffn primitive object-properties obj
|
|
||||||
@deffnx primitive procedure-properties obj
|
|
||||||
Return @var{obj}'s property list.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive set-object-properties! obj alist
|
|
||||||
@deffnx primitive set-procedure-properties! obj alist
|
|
||||||
Set @var{obj}'s property list to @var{alist}.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive object-property obj key
|
|
||||||
@deffnx primitive procedure-property obj key
|
|
||||||
Return the property of @var{obj} with name @var{key}.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive set-object-property! obj key value
|
|
||||||
@deffnx primitive set-procedure-property! obj key value
|
|
||||||
In @var{obj}'s property list, set the property named @var{key}
|
|
||||||
to @var{value}.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
[Interface bug: there should be a second level of interface in which
|
|
||||||
the user provides a "property table" that is possibly private.]
|
|
||||||
|
|
||||||
|
|
||||||
@node Primitive Properties
|
|
||||||
@section Primitive Properties
|
|
||||||
|
|
||||||
@deffn primitive primitive-make-property not_found_proc
|
|
||||||
Create a @dfn{property token} that can be used with
|
|
||||||
@code{primitive-property-ref} and @code{primitive-property-set!}.
|
|
||||||
See @code{primitive-property-ref} for the significance of
|
|
||||||
@var{not_found_proc}.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive primitive-property-ref prop obj
|
|
||||||
Return the property @var{prop} of @var{obj}. When no value
|
|
||||||
has yet been associated with @var{prop} and @var{obj}, call
|
|
||||||
@var{not-found-proc} instead (see @code{primitive-make-property})
|
|
||||||
and use its return value. That value is also associated with
|
|
||||||
@var{obj} via @code{primitive-property-set!}. When
|
|
||||||
@var{not-found-proc} is @code{#f}, use @code{#f} as the
|
|
||||||
default value of @var{prop}.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive primitive-property-set! prop obj val
|
|
||||||
Associate @var{code} with @var{prop} and @var{obj}.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive primitive-property-del! prop obj
|
|
||||||
Remove any value associated with @var{prop} and @var{obj}.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
|
|
||||||
@node Sorting
|
|
||||||
@section Sorting
|
|
||||||
|
|
||||||
@c FIXME::martin: Review me!
|
|
||||||
|
|
||||||
@cindex sorting
|
|
||||||
@cindex sorting lists
|
|
||||||
@cindex sorting vectors
|
|
||||||
|
|
||||||
Sorting is very important in computer programs. Therefore, Guile comes
|
|
||||||
with several sorting procedures built--in. As always, procedures with
|
|
||||||
names ending in @code{!} are side--effecting, that means that they may
|
|
||||||
modify their parameters in order to produce their results.
|
|
||||||
|
|
||||||
The first group of procedures can be used to merge two lists (which must
|
|
||||||
be already sorted on their own) and produce sorted lists containing
|
|
||||||
all elements of the input lists.
|
|
||||||
|
|
||||||
@deffn primitive merge alist blist less
|
|
||||||
Take two lists @var{alist} and @var{blist} such that
|
|
||||||
@code{(sorted? alist less?)} and @code{(sorted? blist less?)} and
|
|
||||||
returns a new list in which the elements of @var{alist} and
|
|
||||||
@var{blist} have been stably interleaved so that
|
|
||||||
@code{(sorted? (merge alist blist less?) less?)}.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive merge! alist blist less
|
|
||||||
Takes two lists @var{alist} and @var{blist} such that
|
|
||||||
@code{(sorted? alist less?)} and @code{(sorted? blist less?)} and
|
|
||||||
returns a new list in which the elements of @var{alist} and
|
|
||||||
@var{blist} have been stably interleaved so that
|
|
||||||
@code{(sorted? (merge alist blist less?) less?)}.
|
|
||||||
This is the destructive variant of @code{merge}
|
|
||||||
Note: this does _not_ accept vectors.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
The following procedures can operate on sequences which are either
|
|
||||||
vectors or list. According to the given arguments, they return sorted
|
|
||||||
vectors or lists, respectively. The first of the following procedures
|
|
||||||
determines whether a sequence is already sorted, the other sort a given
|
|
||||||
sequence. The variants with names starting with @code{stable-} are
|
|
||||||
special in that they maintain a special property of the input sequences:
|
|
||||||
If two or more elements are the same according to the comparison
|
|
||||||
predicate, they are left in the same order as they appeared in the
|
|
||||||
input.
|
|
||||||
|
|
||||||
@deffn primitive sorted? items less
|
|
||||||
Return @code{#t} iff @var{items} is a list or a vector such that
|
|
||||||
for all 1 <= i <= m, the predicate @var{less} returns true when
|
|
||||||
applied to all elements i - 1 and i
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive sort items less
|
|
||||||
Sort the sequence @var{items}, which may be a list or a
|
|
||||||
vector. @var{less} is used for comparing the sequence
|
|
||||||
elements. This is not a stable sort.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive sort! items less
|
|
||||||
Sort the sequence @var{items}, which may be a list or a
|
|
||||||
vector. @var{less} is used for comparing the sequence
|
|
||||||
elements. The sorting is destructive, that means that the
|
|
||||||
input sequence is modified to produce the sorted result.
|
|
||||||
This is not a stable sort.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive stable-sort items less
|
|
||||||
Sort the sequence @var{items}, which may be a list or a
|
|
||||||
vector. @var{less} is used for comparing the sequence elements.
|
|
||||||
This is a stable sort.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive stable-sort! items less
|
|
||||||
Sort the sequence @var{items}, which may be a list or a
|
|
||||||
vector. @var{less} is used for comparing the sequence elements.
|
|
||||||
The sorting is destructive, that means that the input sequence
|
|
||||||
is modified to produce the sorted result.
|
|
||||||
This is a stable sort.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
The procedures in the last group only accept lists or vectors as input,
|
|
||||||
as their names indicate.
|
|
||||||
|
|
||||||
@deffn primitive sort-list items less
|
|
||||||
Sort the list @var{items}, using @var{less} for comparing the
|
|
||||||
list elements. This is a stable sort.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive sort-list! items less
|
|
||||||
Sort the list @var{items}, using @var{less} for comparing the
|
|
||||||
list elements. The sorting is destructive, that means that the
|
|
||||||
input list is modified to produce the sorted result.
|
|
||||||
This is a stable sort.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@deffn primitive restricted-vector-sort! vec less startpos endpos
|
|
||||||
Sort the vector @var{vec}, using @var{less} for comparing
|
|
||||||
the vector elements. @var{startpos} and @var{endpos} delimit
|
|
||||||
the range of the vector which gets sorted. The return value
|
|
||||||
is not specified.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
|
|
||||||
@node Copying
|
|
||||||
@section Copying Deep Structures
|
|
||||||
|
|
||||||
@c FIXME::martin: Review me!
|
|
||||||
|
|
||||||
The procedures for copying lists (@pxref{Lists}) only produce a flat
|
|
||||||
copy of the input list, and currently Guile does not even contain
|
|
||||||
procedures for copying vectors. @code{copy-tree} can be used for these
|
|
||||||
application, as it does not only copy the spine of a list, but also
|
|
||||||
copies any pairs in the cars of the input lists.
|
|
||||||
|
|
||||||
@deffn primitive copy-tree obj
|
|
||||||
Recursively copy the data tree that is bound to @var{obj}, and return a
|
|
||||||
pointer to the new data structure. @code{copy-tree} recurses down the
|
|
||||||
contents of both pairs and vectors (since both cons cells and vector
|
|
||||||
cells may point to arbitrary objects), and stops recursing when it hits
|
|
||||||
any other object.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
|
|
||||||
@node General Conversion
|
|
||||||
@section General String Conversion
|
|
||||||
|
|
||||||
@c FIXME::martin: Review me!
|
|
||||||
|
|
||||||
When debugging Scheme programs, but also for providing a human--friendly
|
|
||||||
interface, a procedure for converting any Scheme object into string
|
|
||||||
format is very useful. Conversion from/to strings can of course be done
|
|
||||||
with specialized procedures when the data type of the object to convert
|
|
||||||
is known, but with this procedure, it is often more comfortable.
|
|
||||||
|
|
||||||
@code{object->string} converts an object by using a print procedure for
|
|
||||||
writing to a string port, and then returning the resulting string.
|
|
||||||
Converting an object back from the string is only possible if the object
|
|
||||||
type has a read syntax and the read syntax is preserved by the printing
|
|
||||||
procedure.
|
|
||||||
|
|
||||||
@deffn primitive object->string obj [printer]
|
|
||||||
Return a Scheme string obtained by printing @var{obj}.
|
|
||||||
Printing function can be specified by the optional second
|
|
||||||
argument @var{printer} (default: @code{write}).
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
|
|
||||||
@c Local Variables:
|
|
||||||
@c TeX-master: "guile.texi"
|
|
||||||
@c End:
|
|
|
@ -83,6 +83,17 @@ This switch sets the global variable use-emacs-interface to @code{#t}.
|
||||||
|
|
||||||
This switch is still experimental.
|
This switch is still experimental.
|
||||||
|
|
||||||
|
@item --use-srfi=@var{list}
|
||||||
|
The option @code{--use-srfi} expects a comma-separated list of numbers,
|
||||||
|
each representing a SRFI number to be loaded into the interpreter
|
||||||
|
before starting evaluating a script file or the REPL. Additionally,
|
||||||
|
the feature identifier for the loaded SRFIs is recognized by
|
||||||
|
`cond-expand' when using this option.
|
||||||
|
|
||||||
|
@example
|
||||||
|
guile --use-srfi=8,13
|
||||||
|
@end example
|
||||||
|
|
||||||
@item -h@r{, }--help
|
@item -h@r{, }--help
|
||||||
Display help on invoking Guile, and then exit.
|
Display help on invoking Guile, and then exit.
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
@page
|
||||||
@node SRFI Support
|
@node SRFI Support
|
||||||
@chapter Various SRFI Support Modules
|
@chapter Various SRFI Support Modules
|
||||||
|
|
||||||
|
@ -5,11 +6,10 @@ SRFI is an acronym for Scheme Request For Implementation. The SRFI
|
||||||
documents define a lot of syntactic and procedure extensions to standard
|
documents define a lot of syntactic and procedure extensions to standard
|
||||||
Scheme as defined in R5RS.
|
Scheme as defined in R5RS.
|
||||||
|
|
||||||
In addition to the string and character-set libraries---documented in
|
Guile has support for a number of SRFIs. This chapter gives an overview
|
||||||
the next chapter---Guile has support for a number of SRFIs. This
|
over the available SRFIs and some usage hints. For complete
|
||||||
chapter gives an overview over the available SRFIs and some usage hints.
|
documentation, design rationales and further examples, we advise you to
|
||||||
For complete documentation, design rationales and further examples, we
|
get the relevant SRFI documents from the SRFI home page
|
||||||
advise you to get the relevant SRFI documents from the SRFI home page
|
|
||||||
@url{http://srfi.schemers.org}.
|
@url{http://srfi.schemers.org}.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
|
@ -84,6 +84,22 @@ implementation-dependant operations, such as @code{use-modules} in
|
||||||
Guile. Thus, it is not necessary to use any module to get access to
|
Guile. Thus, it is not necessary to use any module to get access to
|
||||||
this form.
|
this form.
|
||||||
|
|
||||||
|
Currently, the feature identifiers @code{guile}, @code{r5rs} and
|
||||||
|
@code{srfi-0} are supported. The other SRFIs are not in that list,
|
||||||
|
because the SRFI modules must be explicitly used before their exported
|
||||||
|
bindings can be used. So if a Scheme program wishes to detect whether
|
||||||
|
SRFI-8 is supported in the running implementation, code similar to this
|
||||||
|
may be needed:
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(cond-expand
|
||||||
|
(guile
|
||||||
|
(use-modules (srfi srfi-8)))
|
||||||
|
(srfi-8
|
||||||
|
#t))
|
||||||
|
;; otherwise fail.
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
|
||||||
@node SRFI-2
|
@node SRFI-2
|
||||||
@section SRFI-2 - and-let*
|
@section SRFI-2 - and-let*
|
||||||
|
@ -1160,7 +1176,7 @@ Return a true value if any character in the character set
|
||||||
|
|
||||||
Character sets can be manipulated with the common set algebra operation,
|
Character sets can be manipulated with the common set algebra operation,
|
||||||
such as union, complement, intersection etc. All of these procedures
|
such as union, complement, intersection etc. All of these procedures
|
||||||
provide side--effecting variants, which modify their character set
|
provide side-effecting variants, which modify their character set
|
||||||
argument(s).
|
argument(s).
|
||||||
|
|
||||||
@deffn primitive char-set-adjoin cs char1 @dots{}
|
@deffn primitive char-set-adjoin cs char1 @dots{}
|
||||||
|
@ -1197,7 +1213,7 @@ Return the difference of all argument character sets.
|
||||||
|
|
||||||
@deffn primitive char-set-xor cs1 @dots{}
|
@deffn primitive char-set-xor cs1 @dots{}
|
||||||
@deffnx primitive char-set-xor! cs1 @dots{}
|
@deffnx primitive char-set-xor! cs1 @dots{}
|
||||||
Return the exclusive--or of all argument character sets.
|
Return the exclusive-or of all argument character sets.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@deffn primitive char-set-diff+intersection cs1 @dots{}
|
@deffn primitive char-set-diff+intersection cs1 @dots{}
|
||||||
|
@ -1216,11 +1232,11 @@ In order to make the use of the character set data type and procedures
|
||||||
useful, several predefined character set variables exist.
|
useful, several predefined character set variables exist.
|
||||||
|
|
||||||
@defvar char-set:lower-case
|
@defvar char-set:lower-case
|
||||||
All lower--case characters.
|
All lower-case characters.
|
||||||
@end defvar
|
@end defvar
|
||||||
|
|
||||||
@defvar char-set:upper-case
|
@defvar char-set:upper-case
|
||||||
All upper--case characters.
|
All upper-case characters.
|
||||||
@end defvar
|
@end defvar
|
||||||
|
|
||||||
@defvar char-set:title-case
|
@defvar char-set:title-case
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue