
acons
@c snarfed from alist.c:58
@deffn {Scheme Procedure} acons key value alist
Add a new key-value pair to @var{alist}.  A new pair is
created whose car is @var{key} and whose cdr is @var{value}, and the
pair is consed onto @var{alist}, and the new list is returned.  This
function is @emph{not} destructive; @var{alist} is not modified.
@end deffn

sloppy-assq
@c snarfed from alist.c:81
@deffn {Scheme Procedure} sloppy-assq key alist
Behaves like @code{assq} but does not do any error checking.
Recommended only for use in Guile internals.
@end deffn

sloppy-assv
@c snarfed from alist.c:99
@deffn {Scheme Procedure} sloppy-assv key alist
Behaves like @code{assv} but does not do any error checking.
Recommended only for use in Guile internals.
@end deffn

sloppy-assoc
@c snarfed from alist.c:117
@deffn {Scheme Procedure} sloppy-assoc key alist
Behaves like @code{assoc} but does not do any error checking.
Recommended only for use in Guile internals.
@end deffn

assq
@c snarfed from alist.c:144
@deffn {Scheme Procedure} assq key alist
@deffnx {Scheme Procedure} assv key alist
@deffnx {Scheme Procedure} assoc key alist
Fetch the entry in @var{alist} that is associated with @var{key}.  To
decide whether the argument @var{key} matches a particular entry in
@var{alist}, @code{assq} compares keys with @code{eq?}, @code{assv}
uses @code{eqv?} and @code{assoc} uses @code{equal?}.  If @var{key}
cannot be found in @var{alist} (according to whichever equality
predicate is in use), then return @code{#f}.  These functions
return the entire alist entry found (i.e. both the key and the value).
@end deffn

assv
@c snarfed from alist.c:165
@deffn {Scheme Procedure} assv key alist
Behaves like @code{assq} but uses @code{eqv?} for key comparison.
@end deffn

assoc
@c snarfed from alist.c:186
@deffn {Scheme Procedure} assoc key alist
Behaves like @code{assq} but uses @code{equal?} for key comparison.
@end deffn

assq-ref
@c snarfed from alist.c:230
@deffn {Scheme Procedure} assq-ref alist key
@deffnx {Scheme Procedure} assv-ref alist key
@deffnx {Scheme Procedure} assoc-ref alist key
Like @code{assq}, @code{assv} and @code{assoc}, except that only the
value associated with @var{key} in @var{alist} is returned.  These
functions are equivalent to

@lisp
(let ((ent (@var{associator} @var{key} @var{alist})))
  (and ent (cdr ent)))
@end lisp

where @var{associator} is one of @code{assq}, @code{assv} or @code{assoc}.
@end deffn

assv-ref
@c snarfed from alist.c:247
@deffn {Scheme Procedure} assv-ref alist key
Behaves like @code{assq-ref} but uses @code{eqv?} for key comparison.
@end deffn

assoc-ref
@c snarfed from alist.c:264
@deffn {Scheme Procedure} assoc-ref alist key
Behaves like @code{assq-ref} but uses @code{equal?} for key comparison.
@end deffn

assq-set!
@c snarfed from alist.c:293
@deffn {Scheme Procedure} assq-set! alist key val
@deffnx {Scheme Procedure} assv-set! alist key value
@deffnx {Scheme Procedure} assoc-set! alist key value
Reassociate @var{key} in @var{alist} with @var{value}: find any existing
@var{alist} entry for @var{key} and associate it with the new
@var{value}.  If @var{alist} does not contain an entry for @var{key},
add a new one.  Return the (possibly new) alist.

These functions do not attempt to verify the structure of @var{alist},
and so may cause unusual results if passed an object that is not an
association list.
@end deffn

assv-set!
@c snarfed from alist.c:311
@deffn {Scheme Procedure} assv-set! alist key val
Behaves like @code{assq-set!} but uses @code{eqv?} for key comparison.
@end deffn

assoc-set!
@c snarfed from alist.c:329
@deffn {Scheme Procedure} assoc-set! alist key val
Behaves like @code{assq-set!} but uses @code{equal?} for key comparison.
@end deffn

assq-remove!
@c snarfed from alist.c:353
@deffn {Scheme Procedure} assq-remove! alist key
@deffnx {Scheme Procedure} assv-remove! alist key
@deffnx {Scheme Procedure} assoc-remove! alist key
Delete the first entry in @var{alist} associated with @var{key}, and return
the resulting alist.
@end deffn

assv-remove!
@c snarfed from alist.c:369
@deffn {Scheme Procedure} assv-remove! alist key
Behaves like @code{assq-remove!} but uses @code{eqv?} for key comparison.
@end deffn

assoc-remove!
@c snarfed from alist.c:385
@deffn {Scheme Procedure} assoc-remove! alist key
Behaves like @code{assq-remove!} but uses @code{equal?} for key comparison.
@end deffn

make-arbiter
@c snarfed from arbiters.c:82
@deffn {Scheme Procedure} make-arbiter name
Return an object of type arbiter and name @var{name}. Its
state is initially unlocked.  Arbiters are a way to achieve
process synchronization.
@end deffn

try-arbiter
@c snarfed from arbiters.c:92
@deffn {Scheme Procedure} try-arbiter arb
Return @code{#t} and lock the arbiter @var{arb} if the arbiter
was unlocked. Otherwise, return @code{#f}.
@end deffn

release-arbiter
@c snarfed from arbiters.c:113
@deffn {Scheme Procedure} release-arbiter arb
Return @code{#t} and unlock the arbiter @var{arb} if the
arbiter was locked. Otherwise, return @code{#f}.
@end deffn

async
@c snarfed from async.c:288
@deffn {Scheme Procedure} async thunk
Create a new async for the procedure @var{thunk}.
@end deffn

system-async
@c snarfed from async.c:298
@deffn {Scheme Procedure} system-async thunk
Create a new async for the procedure @var{thunk}.  Also
add it to the system's list of active async objects.
@end deffn

async-mark
@c snarfed from async.c:309
@deffn {Scheme Procedure} async-mark a
Mark the async @var{a} for future execution.
@end deffn

system-async-mark
@c snarfed from async.c:325
@deffn {Scheme Procedure} system-async-mark a
Mark the async @var{a} for future execution.
@end deffn

run-asyncs
@c snarfed from async.c:345
@deffn {Scheme Procedure} run-asyncs list_of_a
Execute all thunks from the asyncs of the list @var{list_of_a}.
@end deffn

noop
@c snarfed from async.c:379
@deffn {Scheme Procedure} noop . args
Do nothing.  When called without arguments, return @code{#f},
otherwise return the first argument.
@end deffn

unmask-signals
@c snarfed from async.c:431
@deffn {Scheme Procedure} unmask-signals
Unmask signals. The returned value is not specified.
@end deffn

mask-signals
@c snarfed from async.c:442
@deffn {Scheme Procedure} mask-signals
Mask signals. The returned value is not specified.
@end deffn

display-error
@c snarfed from backtrace.c:265
@deffn {Scheme Procedure} display-error stack port subr message args rest
Display an error message to the output port @var{port}.
@var{stack} is the saved stack for the error, @var{subr} is
the name of the procedure in which the error occurred and
@var{message} is the actual error message, which may contain
formatting instructions. These will format the arguments in
the list @var{args} accordingly.  @var{rest} is currently
ignored.
@end deffn

display-application
@c snarfed from backtrace.c:402
@deffn {Scheme Procedure} display-application frame [port [indent]]
Display a procedure application @var{frame} to the output port
@var{port}. @var{indent} specifies the indentation of the
output.
@end deffn

display-backtrace
@c snarfed from backtrace.c:713
@deffn {Scheme Procedure} display-backtrace stack port [first [depth]]
Display a backtrace to the output port @var{port}. @var{stack}
is the stack to take the backtrace from, @var{first} specifies
where in the stack to start and @var{depth} how much frames
to display. Both @var{first} and @var{depth} can be @code{#f},
which means that default values will be used.
@end deffn

backtrace
@c snarfed from backtrace.c:736
@deffn {Scheme Procedure} backtrace
Display a backtrace of the stack saved by the last error
to the current output port.
@end deffn

not
@c snarfed from boolean.c:54
@deffn {Scheme Procedure} not x
Return @code{#t} iff @var{x} is @code{#f}, else return @code{#f}.
@end deffn

boolean?
@c snarfed from boolean.c:64
@deffn {Scheme Procedure} boolean? obj
Return @code{#t} iff @var{obj} is either @code{#t} or @code{#f}.
@end deffn

char?
@c snarfed from chars.c:55
@deffn {Scheme Procedure} char? x
Return @code{#t} iff @var{x} is a character, else @code{#f}.
@end deffn

char=?
@c snarfed from chars.c:64
@deffn {Scheme Procedure} char=? x y
Return @code{#t} iff @var{x} is the same character as @var{y}, else @code{#f}.
@end deffn

char<?
@c snarfed from chars.c:77
@deffn {Scheme Procedure} char<? x y
Return @code{#t} iff @var{x} is less than @var{y} in the ASCII sequence,
else @code{#f}.
@end deffn

char<=?
@c snarfed from chars.c:89
@deffn {Scheme Procedure} char<=? x y
Return @code{#t} iff @var{x} is less than or equal to @var{y} in the
ASCII sequence, else @code{#f}.
@end deffn

char>?
@c snarfed from chars.c:101
@deffn {Scheme Procedure} char>? x y
Return @code{#t} iff @var{x} is greater than @var{y} in the ASCII
sequence, else @code{#f}.
@end deffn

char>=?
@c snarfed from chars.c:113
@deffn {Scheme Procedure} char>=? x y
Return @code{#t} iff @var{x} is greater than or equal to @var{y} in the
ASCII sequence, else @code{#f}.
@end deffn

char-ci=?
@c snarfed from chars.c:125
@deffn {Scheme Procedure} char-ci=? x y
Return @code{#t} iff @var{x} is the same character as @var{y} ignoring
case, else @code{#f}.
@end deffn

char-ci<?
@c snarfed from chars.c:137
@deffn {Scheme Procedure} char-ci<? x y
Return @code{#t} iff @var{x} is less than @var{y} in the ASCII sequence
ignoring case, else @code{#f}.
@end deffn

char-ci<=?
@c snarfed from chars.c:149
@deffn {Scheme Procedure} char-ci<=? x y
Return @code{#t} iff @var{x} is less than or equal to @var{y} in the
ASCII sequence ignoring case, else @code{#f}.
@end deffn

char-ci>?
@c snarfed from chars.c:161
@deffn {Scheme Procedure} char-ci>? x y
Return @code{#t} iff @var{x} is greater than @var{y} in the ASCII
sequence ignoring case, else @code{#f}.
@end deffn

char-ci>=?
@c snarfed from chars.c:173
@deffn {Scheme Procedure} char-ci>=? x y
Return @code{#t} iff @var{x} is greater than or equal to @var{y} in the
ASCII sequence ignoring case, else @code{#f}.
@end deffn

char-alphabetic?
@c snarfed from chars.c:186
@deffn {Scheme Procedure} char-alphabetic? chr
Return @code{#t} iff @var{chr} is alphabetic, else @code{#f}.
Alphabetic means the same thing as the isalpha C library function.
@end deffn

char-numeric?
@c snarfed from chars.c:197
@deffn {Scheme Procedure} char-numeric? chr
Return @code{#t} iff @var{chr} is numeric, else @code{#f}.
Numeric means the same thing as the isdigit C library function.
@end deffn

char-whitespace?
@c snarfed from chars.c:208
@deffn {Scheme Procedure} char-whitespace? chr
Return @code{#t} iff @var{chr} is whitespace, else @code{#f}.
Whitespace means the same thing as the isspace C library function.
@end deffn

char-upper-case?
@c snarfed from chars.c:221
@deffn {Scheme Procedure} char-upper-case? chr
Return @code{#t} iff @var{chr} is uppercase, else @code{#f}.
Uppercase means the same thing as the isupper C library function.
@end deffn

char-lower-case?
@c snarfed from chars.c:233
@deffn {Scheme Procedure} char-lower-case? chr
Return @code{#t} iff @var{chr} is lowercase, else @code{#f}.
Lowercase means the same thing as the islower C library function.
@end deffn

char-is-both?
@c snarfed from chars.c:247
@deffn {Scheme Procedure} char-is-both? chr
Return @code{#t} iff @var{chr} is either uppercase or lowercase, else @code{#f}.
Uppercase and lowercase are as defined by the isupper and islower
C library functions.
@end deffn

char->integer
@c snarfed from chars.c:261
@deffn {Scheme Procedure} char->integer chr
Return the number corresponding to ordinal position of @var{chr} in the
ASCII sequence.
@end deffn

integer->char
@c snarfed from chars.c:273
@deffn {Scheme Procedure} integer->char n
Return the character at position @var{n} in the ASCII sequence.
@end deffn

char-upcase
@c snarfed from chars.c:284
@deffn {Scheme Procedure} char-upcase chr
Return the uppercase character version of @var{chr}.
@end deffn

char-downcase
@c snarfed from chars.c:295
@deffn {Scheme Procedure} char-downcase chr
Return the lowercase character version of @var{chr}.
@end deffn

debug-options-interface
@c snarfed from debug.c:79
@deffn {Scheme Procedure} debug-options-interface [setting]
Option interface for the debug options. Instead of using
this procedure directly, use the procedures @code{debug-enable},
@code{debug-disable}, @code{debug-set!} and @code{debug-options}.
@end deffn

with-traps
@c snarfed from debug.c:127
@deffn {Scheme Procedure} with-traps thunk
Call @var{thunk} with traps enabled.
@end deffn

memoized?
@c snarfed from debug.c:169
@deffn {Scheme Procedure} memoized? obj
Return @code{#t} if @var{obj} is memoized.
@end deffn

unmemoize
@c snarfed from debug.c:371
@deffn {Scheme Procedure} unmemoize m
Unmemoize the memoized expression @var{m},
@end deffn

memoized-environment
@c snarfed from debug.c:381
@deffn {Scheme Procedure} memoized-environment m
Return the environment of the memoized expression @var{m}.
@end deffn

procedure-name
@c snarfed from debug.c:391
@deffn {Scheme Procedure} procedure-name proc
Return the name of the procedure @var{proc}
@end deffn

procedure-source
@c snarfed from debug.c:419
@deffn {Scheme Procedure} procedure-source proc
Return the source of the procedure @var{proc}.
@end deffn

procedure-environment
@c snarfed from debug.c:470
@deffn {Scheme Procedure} procedure-environment proc
Return the environment of the procedure @var{proc}.
@end deffn

local-eval
@c snarfed from debug.c:502
@deffn {Scheme Procedure} local-eval exp [env]
Evaluate @var{exp} in its environment.  If @var{env} is supplied,
it is the environment in which to evaluate @var{exp}.  Otherwise,
@var{exp} must be a memoized code object (in which case, its environment
is implicit).
@end deffn

debug-object?
@c snarfed from debug.c:589
@deffn {Scheme Procedure} debug-object? obj
Return @code{#t} if @var{obj} is a debug object.
@end deffn

c-registered-modules
@c snarfed from dynl.c:187
@deffn {Scheme Procedure} c-registered-modules
Return a list of the object code modules that have been imported into
the current Guile process.  Each element of the list is a pair whose
car is the name of the module, and whose cdr is the function handle
for that module's initializer function.  The name is the string that
has been passed to scm_register_module_xxx.
@end deffn

c-clear-registered-modules
@c snarfed from dynl.c:208
@deffn {Scheme Procedure} c-clear-registered-modules
Destroy the list of modules registered with the current Guile process.
The return value is unspecified.  @strong{Warning:} this function does
not actually unlink or deallocate these modules, but only destroys the
records of which modules have been loaded.  It should therefore be used
only by module bookkeeping operations.
@end deffn

dynamic-link
@c snarfed from dynl.c:363
@deffn {Scheme Procedure} dynamic-link filename
Open the dynamic library called @var{filename}.  A library
handle representing the opened library is returned; this handle
should be used as the @var{dobj} argument to the following
functions.
@end deffn

dynamic-object?
@c snarfed from dynl.c:379
@deffn {Scheme Procedure} dynamic-object? obj
Return @code{#t} if @var{obj} is a dynamic library handle, or @code{#f}
otherwise.
@end deffn

dynamic-unlink
@c snarfed from dynl.c:392
@deffn {Scheme Procedure} dynamic-unlink dobj
Unlink the indicated object file from the application.  The
argument @var{dobj} must have been obtained by a call to
@code{dynamic-link}.  After @code{dynamic-unlink} has been
called on @var{dobj}, its content is no longer accessible.
@end deffn

dynamic-func
@c snarfed from dynl.c:419
@deffn {Scheme Procedure} dynamic-func name dobj
Search the dynamic object @var{dobj} for the C function
indicated by the string @var{name} and return some Scheme
handle that can later be used with @code{dynamic-call} to
actually call the function.

Regardless whether your C compiler prepends an underscore @samp{_} to
the global names in a program, you should @strong{not} include this
underscore in @var{function}.  Guile knows whether the underscore is
needed or not and will add it when necessary.
@end deffn

dynamic-call
@c snarfed from dynl.c:459
@deffn {Scheme Procedure} dynamic-call func dobj
Call the C function indicated by @var{func} and @var{dobj}.
The function is passed no arguments and its return value is
ignored.  When @var{function} is something returned by
@code{dynamic-func}, call that function and ignore @var{dobj}.
When @var{func} is a string , look it up in @var{dynobj}; this
is equivalent to
@smallexample
(dynamic-call (dynamic-func @var{func} @var{dobj} #f))
@end smallexample

Interrupts are deferred while the C function is executing (with
@code{SCM_DEFER_INTS}/@code{SCM_ALLOW_INTS}).
@end deffn

dynamic-args-call
@c snarfed from dynl.c:487
@deffn {Scheme Procedure} dynamic-args-call func dobj args
Call the C function indicated by @var{func} and @var{dobj},
just like @code{dynamic-call}, but pass it some arguments and
return its return value.  The C function is expected to take
two arguments and return an @code{int}, just like @code{main}:
@smallexample
int c_func (int argc, char **argv);
@end smallexample

The parameter @var{args} must be a list of strings and is
converted into an array of @code{char *}.  The array is passed
in @var{argv} and its size in @var{argc}.  The return value is
converted to a Scheme number and returned from the call to
@code{dynamic-args-call}.
@end deffn

dynamic-wind
@c snarfed from dynwind.c:119
@deffn {Scheme Procedure} dynamic-wind in_guard thunk out_guard
All three arguments must be 0-argument procedures.
@var{in_guard} is called, then @var{thunk}, then
@var{out_guard}.

If, any time during the execution of @var{thunk}, the
continuation of the @code{dynamic_wind} expression is escaped
non-locally, @var{out_guard} is called.  If the continuation of
the dynamic-wind is re-entered, @var{in_guard} is called.  Thus
@var{in_guard} and @var{out_guard} may be called any number of
times.
@lisp
(define x 'normal-binding)
@result{} x
(define a-cont  (call-with-current-continuation
		  (lambda (escape)
		     (let ((old-x x))
		       (dynamic-wind
			  ;; in-guard:
			  ;;
			  (lambda () (set! x 'special-binding))

			  ;; thunk
			  ;;
		 	  (lambda () (display x) (newline)
				     (call-with-current-continuation escape)
				     (display x) (newline)
				     x)

			  ;; out-guard:
			  ;;
			  (lambda () (set! x old-x)))))))

;; Prints:
special-binding
;; Evaluates to:
@result{} a-cont
x
@result{} normal-binding
(a-cont #f)
;; Prints:
special-binding
;; Evaluates to:
@result{} a-cont  ;; the value of the (define a-cont...)
x
@result{} normal-binding
a-cont
@result{} special-binding
@end lisp
@end deffn

environment?
@c snarfed from environments.c:135
@deffn {Scheme Procedure} environment? obj
Return @code{#t} if @var{obj} is an environment, or @code{#f}
otherwise.
@end deffn

environment-bound?
@c snarfed from environments.c:146
@deffn {Scheme Procedure} environment-bound? env sym
Return @code{#t} if @var{sym} is bound in @var{env}, or
@code{#f} otherwise.
@end deffn

environment-ref
@c snarfed from environments.c:161
@deffn {Scheme Procedure} environment-ref env sym
Return the value of the location bound to @var{sym} in
@var{env}. If @var{sym} is unbound in @var{env}, signal an
@code{environment:unbound} error.
@end deffn

environment-fold
@c snarfed from environments.c:231
@deffn {Scheme Procedure} environment-fold env proc init
Iterate over all the bindings in @var{env}, accumulating some
value.
For each binding in @var{env}, apply @var{proc} to the symbol
bound, its value, and the result from the previous application
of @var{proc}.
Use @var{init} as @var{proc}'s third argument the first time
@var{proc} is applied.
If @var{env} contains no bindings, this function simply returns
@var{init}.
If @var{env} binds the symbol sym1 to the value val1, sym2 to
val2, and so on, then this procedure computes:
@lisp
  (proc sym1 val1
        (proc sym2 val2
              ...
              (proc symn valn
                    init)))
@end lisp
Each binding in @var{env} will be processed exactly once.
@code{environment-fold} makes no guarantees about the order in
which the bindings are processed.
Here is a function which, given an environment, constructs an
association list representing that environment's bindings,
using environment-fold:
@lisp
  (define (environment->alist env)
    (environment-fold env
                      (lambda (sym val tail)
                        (cons (cons sym val) tail))
                      '()))
@end lisp
@end deffn

environment-define
@c snarfed from environments.c:266
@deffn {Scheme Procedure} environment-define env sym val
Bind @var{sym} to a new location containing @var{val} in
@var{env}. If @var{sym} is already bound to another location
in @var{env} and the binding is mutable, that binding is
replaced.  The new binding and location are both mutable. The
return value is unspecified.
If @var{sym} is already bound in @var{env}, and the binding is
immutable, signal an @code{environment:immutable-binding} error.
@end deffn

environment-undefine
@c snarfed from environments.c:292
@deffn {Scheme Procedure} environment-undefine env sym
Remove any binding for @var{sym} from @var{env}. If @var{sym}
is unbound in @var{env}, do nothing.  The return value is
unspecified.
If @var{sym} is already bound in @var{env}, and the binding is
immutable, signal an @code{environment:immutable-binding} error.
@end deffn

environment-set!
@c snarfed from environments.c:320
@deffn {Scheme Procedure} environment-set! env sym val
If @var{env} binds @var{sym} to some location, change that
location's value to @var{val}.  The return value is
unspecified.
If @var{sym} is not bound in @var{env}, signal an
@code{environment:unbound} error.  If @var{env} binds @var{sym}
to an immutable location, signal an
@code{environment:immutable-location} error.
@end deffn

environment-cell
@c snarfed from environments.c:355
@deffn {Scheme Procedure} environment-cell env sym for_write
Return the value cell which @var{env} binds to @var{sym}, or
@code{#f} if the binding does not live in a value cell.
The argument @var{for-write} indicates whether the caller
intends to modify the variable's value by mutating the value
cell.  If the variable is immutable, then
@code{environment-cell} signals an
@code{environment:immutable-location} error.
If @var{sym} is unbound in @var{env}, signal an
@code{environment:unbound} error.
If you use this function, you should consider using
@code{environment-observe}, to be notified when @var{sym} gets
re-bound to a new value cell, or becomes undefined.
@end deffn

environment-observe
@c snarfed from environments.c:407
@deffn {Scheme Procedure} environment-observe env proc
Whenever @var{env}'s bindings change, apply @var{proc} to
@var{env}.
This function returns an object, token, which you can pass to
@code{environment-unobserve} to remove @var{proc} from the set
of procedures observing @var{env}.  The type and value of
token is unspecified.
@end deffn

environment-observe-weak
@c snarfed from environments.c:424
@deffn {Scheme Procedure} environment-observe-weak env proc
This function is the same as environment-observe, except that
the reference @var{env} retains to @var{proc} is a weak
reference. This means that, if there are no other live,
non-weak references to @var{proc}, it will be
garbage-collected, and dropped from @var{env}'s
list of observing procedures.
@end deffn

environment-unobserve
@c snarfed from environments.c:460
@deffn {Scheme Procedure} environment-unobserve token
Cancel the observation request which returned the value
@var{token}.  The return value is unspecified.
If a call @code{(environment-observe env proc)} returns
@var{token}, then the call @code{(environment-unobserve token)}
will cause @var{proc} to no longer be called when @var{env}'s
bindings change.
@end deffn

make-leaf-environment
@c snarfed from environments.c:1040
@deffn {Scheme Procedure} make-leaf-environment
Create a new leaf environment, containing no bindings.
All bindings and locations created in the new environment
will be mutable.
@end deffn

leaf-environment?
@c snarfed from environments.c:1063
@deffn {Scheme Procedure} leaf-environment? object
Return @code{#t} if object is a leaf environment, or @code{#f}
otherwise.
@end deffn

make-eval-environment
@c snarfed from environments.c:1429
@deffn {Scheme Procedure} make-eval-environment local imported
Return a new environment object eval whose bindings are the
union of the bindings in the environments @var{local} and
@var{imported}, with bindings from @var{local} taking
precedence. Definitions made in eval are placed in @var{local}.
Applying @code{environment-define} or
@code{environment-undefine} to eval has the same effect as
applying the procedure to @var{local}.
Note that eval incorporates @var{local} and @var{imported} by
reference:
If, after creating eval, the program changes the bindings of
@var{local} or @var{imported}, those changes will be visible
in eval.
Since most Scheme evaluation takes place in eval environments,
they transparently cache the bindings received from @var{local}
and @var{imported}. Thus, the first time the program looks up
a symbol in eval, eval may make calls to @var{local} or
@var{imported} to find their bindings, but subsequent
references to that symbol will be as fast as references to
bindings in finite environments.
In typical use, @var{local} will be a finite environment, and
@var{imported} will be an import environment
@end deffn

eval-environment?
@c snarfed from environments.c:1466
@deffn {Scheme Procedure} eval-environment? object
Return @code{#t} if object is an eval environment, or @code{#f}
otherwise.
@end deffn

eval-environment-local
@c snarfed from environments.c:1476
@deffn {Scheme Procedure} eval-environment-local env
Return the local environment of eval environment @var{env}.
@end deffn

eval-environment-set-local!
@c snarfed from environments.c:1488
@deffn {Scheme Procedure} eval-environment-set-local! env local
Change @var{env}'s local environment to @var{local}.
@end deffn

eval-environment-imported
@c snarfed from environments.c:1514
@deffn {Scheme Procedure} eval-environment-imported env
Return the imported environment of eval environment @var{env}.
@end deffn

eval-environment-set-imported!
@c snarfed from environments.c:1526
@deffn {Scheme Procedure} eval-environment-set-imported! env imported
Change @var{env}'s imported environment to @var{imported}.
@end deffn

make-import-environment
@c snarfed from environments.c:1850
@deffn {Scheme Procedure} make-import-environment imports conflict_proc
Return a new environment @var{imp} whose bindings are the union
of the bindings from the environments in @var{imports};
@var{imports} must be a list of environments. That is,
@var{imp} binds a symbol to a location when some element of
@var{imports} does.
If two different elements of @var{imports} have a binding for
the same symbol, the @var{conflict-proc} is called with the
following parameters:  the import environment, the symbol and
the list of the imported environments that bind the symbol.
If the @var{conflict-proc} returns an environment @var{env},
the conflict is considered as resolved and the binding from
@var{env} is used.  If the @var{conflict-proc} returns some
non-environment object, the conflict is considered unresolved
and the symbol is treated as unspecified in the import
environment.
The checking for conflicts may be performed lazily, i. e. at
the moment when a value or binding for a certain symbol is
requested instead of the moment when the environment is
created or the bindings of the imports change.
All bindings in @var{imp} are immutable. If you apply
@code{environment-define} or @code{environment-undefine} to
@var{imp}, Guile will signal an
 @code{environment:immutable-binding} error. However,
notice that the set of bindings in @var{imp} may still change,
if one of its imported environments changes.
@end deffn

import-environment?
@c snarfed from environments.c:1879
@deffn {Scheme Procedure} import-environment? object
Return @code{#t} if object is an import environment, or
@code{#f} otherwise.
@end deffn

import-environment-imports
@c snarfed from environments.c:1890
@deffn {Scheme Procedure} import-environment-imports env
Return the list of environments imported by the import
environment @var{env}.
@end deffn

import-environment-set-imports!
@c snarfed from environments.c:1903
@deffn {Scheme Procedure} import-environment-set-imports! env imports
Change @var{env}'s list of imported environments to
@var{imports}, and check for conflicts.
@end deffn

make-export-environment
@c snarfed from environments.c:2171
@deffn {Scheme Procedure} make-export-environment private signature
Return a new environment @var{exp} containing only those
bindings in private whose symbols are present in
@var{signature}. The @var{private} argument must be an
environment.

The environment @var{exp} binds symbol to location when
@var{env} does, and symbol is exported by @var{signature}.

@var{signature} is a list specifying which of the bindings in
@var{private} should be visible in @var{exp}. Each element of
@var{signature} should be a list of the form:
  (symbol attribute ...)
where each attribute is one of the following:
@table @asis
@item the symbol @code{mutable-location}
  @var{exp} should treat the
  location bound to symbol as mutable. That is, @var{exp}
  will pass calls to @code{environment-set!} or
  @code{environment-cell} directly through to private.
@item the symbol @code{immutable-location}
  @var{exp} should treat
  the location bound to symbol as immutable. If the program
  applies @code{environment-set!} to @var{exp} and symbol, or
  calls @code{environment-cell} to obtain a writable value
  cell, @code{environment-set!} will signal an
  @code{environment:immutable-location} error. Note that, even
  if an export environment treats a location as immutable, the
  underlying environment may treat it as mutable, so its
  value may change.
@end table
It is an error for an element of signature to specify both
@code{mutable-location} and @code{immutable-location}. If
neither is specified, @code{immutable-location} is assumed.

As a special case, if an element of signature is a lone
symbol @var{sym}, it is equivalent to an element of the form
@code{(sym)}.

All bindings in @var{exp} are immutable. If you apply
@code{environment-define} or @code{environment-undefine} to
@var{exp}, Guile will signal an
@code{environment:immutable-binding} error. However,
notice that the set of bindings in @var{exp} may still change,
if the bindings in private change.
@end deffn

export-environment?
@c snarfed from environments.c:2206
@deffn {Scheme Procedure} export-environment? object
Return @code{#t} if object is an export environment, or
@code{#f} otherwise.
@end deffn

export-environment-private
@c snarfed from environments.c:2216
@deffn {Scheme Procedure} export-environment-private env
Return the private environment of export environment @var{env}.
@end deffn

export-environment-set-private!
@c snarfed from environments.c:2228
@deffn {Scheme Procedure} export-environment-set-private! env private
Change the private environment of export environment @var{env}.
@end deffn

export-environment-signature
@c snarfed from environments.c:2250
@deffn {Scheme Procedure} export-environment-signature env
Return the signature of export environment @var{env}.
@end deffn

export-environment-set-signature!
@c snarfed from environments.c:2324
@deffn {Scheme Procedure} export-environment-set-signature! env signature
Change the signature of export environment @var{env}.
@end deffn

eq?
@c snarfed from eq.c:62
@deffn {Scheme Procedure} 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

eqv?
@c snarfed from eq.c:76
@deffn {Scheme Procedure} 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

equal?
@c snarfed from eq.c:128
@deffn {Scheme Procedure} 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

scm-error
@c snarfed from error.c:117
@deffn {Scheme Procedure} scm-error key subr message args data
Raise an error with key @var{key}.  @var{subr} can be a string
naming the procedure associated with the error, or @code{#f}.
@var{message} is the error message string, possibly containing
@code{~S} and @code{~A} escapes.  When an error is reported,
these are replaced by formatting the corresponding members of
@var{args}: @code{~A} (was @code{%s} in older versions of
Guile) formats using @code{display} and @code{~S} (was
@code{%S}) formats using @code{write}.  @var{data} is a list or
@code{#f} depending on @var{key}: if @var{key} is
@code{system-error} then it should be a list containing the
Unix @code{errno} value; If @var{key} is @code{signal} then it
should be a list containing the Unix signal number; otherwise
it will usually be @code{#f}.
@end deffn

strerror
@c snarfed from error.c:159
@deffn {Scheme Procedure} strerror err
Return the Unix error message corresponding to @var{err}, which
must be an integer value.
@end deffn

apply:nconc2last
@c snarfed from eval.c:3392
@deffn {Scheme Procedure} apply:nconc2last lst
Given a list (@var{arg1} @dots{} @var{args}), this function
conses the @var{arg1} @dots{} arguments onto the front of
@var{args}, and returns the resulting list. Note that
@var{args} is a list; thus, the argument to this function is
a list whose last element is a list.
Note: Rather than do new consing, @code{apply:nconc2last}
destroys its argument, so use with care.
@end deffn

force
@c snarfed from eval.c:3934
@deffn {Scheme Procedure} force x
If the promise @var{x} has not been computed yet, compute and
return @var{x}, otherwise just return the previously computed
value.
@end deffn

promise?
@c snarfed from eval.c:3957
@deffn {Scheme Procedure} promise? obj
Return true if @var{obj} is a promise, i.e. a delayed computation
(@pxref{Delayed evaluation,,,r5rs.info,The Revised^5 Report on Scheme}).
@end deffn

cons-source
@c snarfed from eval.c:3969
@deffn {Scheme Procedure} cons-source xorig x y
Create and return a new pair whose car and cdr are @var{x} and @var{y}.
Any source properties associated with @var{xorig} are also associated
with the new pair.
@end deffn

copy-tree
@c snarfed from eval.c:3991
@deffn {Scheme Procedure} 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

primitive-eval
@c snarfed from eval.c:4086
@deffn {Scheme Procedure} primitive-eval exp
Evaluate @var{exp} in the top-level environment specified by
the current module.
@end deffn

eval
@c snarfed from eval.c:4156
@deffn {Scheme Procedure} eval exp module
Evaluate @var{exp}, a list representing a Scheme expression,
in the top-level environment specified by @var{module}.
While @var{exp} is evaluated (using @code{primitive-eval}),
@var{module} is made the current module.  The current module
is reset to its previous value when @var{eval} returns.
Example: (eval '(+ 1 2) (interaction-environment))
@end deffn

eval2
@c snarfed from eval.c:4200
@deffn {Scheme Procedure} eval2 obj env_thunk
Evaluate @var{exp}, a Scheme expression, in the environment
designated by @var{lookup}, a symbol-lookup function.
Do not use this version of eval, it does not play well
with the module system.  Use @code{eval} or
@code{primitive-eval} instead.
@end deffn

eval-options-interface
@c snarfed from eval.c:1726
@deffn {Scheme Procedure} eval-options-interface [setting]
Option interface for the evaluation options. Instead of using
this procedure directly, use the procedures @code{eval-enable},
@code{eval-disable}, @code{eval-set!} and @code{eval-options}.
@end deffn

evaluator-traps-interface
@c snarfed from eval.c:1743
@deffn {Scheme Procedure} evaluator-traps-interface [setting]
Option interface for the evaluator trap options.
@end deffn

defined?
@c snarfed from evalext.c:75
@deffn {Scheme Procedure} defined? sym [env]
Return @code{#t} if @var{sym} is defined in the lexical environment @var{env}.  When @var{env} is not specified, look in the top-level environment as defined by the current module.
@end deffn

map-in-order
@c snarfed from evalext.c:144
@deffn {Scheme Procedure} map-in-order
implemented by the C function "scm_map"
@end deffn

self-evaluating?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{default_value} is returned.
@end deffn

%initialize-object
@c snarfed from goops.c:400
@deffn {Scheme Procedure} %initialize-object obj initargs
Initialize the object @var{obj} with the given arguments
@var{initargs}.
@end deffn

%prep-layout!
@c snarfed from goops.c:499
@deffn {Scheme Procedure} %prep-layout! class

@end deffn

%inherit-magic!
@c snarfed from goops.c:605
@deffn {Scheme Procedure} %inherit-magic! class dsupers

@end deffn

instance?
@c snarfed from goops.c:846
@deffn {Scheme Procedure} instance? obj
Return @code{#t} if @var{obj} is an instance.
@end deffn

class-name
@c snarfed from goops.c:861
@deffn {Scheme Procedure} class-name obj
Return the class name of @var{obj}.
@end deffn

class-direct-supers
@c snarfed from goops.c:871
@deffn {Scheme Procedure} class-direct-supers obj
Return the direct superclasses of the class @var{obj}.
@end deffn

class-direct-slots
@c snarfed from goops.c:881
@deffn {Scheme Procedure} class-direct-slots obj
Return the direct slots of the class @var{obj}.
@end deffn

class-direct-subclasses
@c snarfed from goops.c:891
@deffn {Scheme Procedure} class-direct-subclasses obj
Return the direct subclasses of the class @var{obj}.
@end deffn

class-direct-methods
@c snarfed from goops.c:901
@deffn {Scheme Procedure} class-direct-methods obj
Return the direct methods of the class @var{obj}
@end deffn

class-precedence-list
@c snarfed from goops.c:911
@deffn {Scheme Procedure} class-precedence-list obj
Return the class precedence list of the class @var{obj}.
@end deffn

class-slots
@c snarfed from goops.c:921
@deffn {Scheme Procedure} class-slots obj
Return the slot list of the class @var{obj}.
@end deffn

class-environment
@c snarfed from goops.c:931
@deffn {Scheme Procedure} class-environment obj
Return the environment of the class @var{obj}.
@end deffn

generic-function-name
@c snarfed from goops.c:942
@deffn {Scheme Procedure} generic-function-name obj
Return the name of the generic function @var{obj}.
@end deffn

generic-function-methods
@c snarfed from goops.c:952
@deffn {Scheme Procedure} generic-function-methods obj
Return the methods of the generic function @var{obj}.
@end deffn

method-generic-function
@c snarfed from goops.c:963
@deffn {Scheme Procedure} method-generic-function obj
Return the generic function for the method @var{obj}.
@end deffn

method-specializers
@c snarfed from goops.c:973
@deffn {Scheme Procedure} method-specializers obj
Return specializers of the method @var{obj}.
@end deffn

method-procedure
@c snarfed from goops.c:983
@deffn {Scheme Procedure} method-procedure obj
Return the procedure of the method @var{obj}.
@end deffn

accessor-method-slot-definition
@c snarfed from goops.c:993
@deffn {Scheme Procedure} accessor-method-slot-definition obj
Return the slot definition of the accessor @var{obj}.
@end deffn

%tag-body
@c snarfed from goops.c:1003
@deffn {Scheme Procedure} %tag-body body
Internal GOOPS magic---don't use this function!
@end deffn

make-unbound
@c snarfed from goops.c:1018
@deffn {Scheme Procedure} make-unbound
Return the unbound value.
@end deffn

unbound?
@c snarfed from goops.c:1027
@deffn {Scheme Procedure} unbound? obj
Return @code{#t} if @var{obj} is unbound.
@end deffn

assert-bound
@c snarfed from goops.c:1037
@deffn {Scheme Procedure} assert-bound value obj
Return @var{value} if it is bound, and invoke the
@var{slot-unbound} method of @var{obj} if it is not.
@end deffn

@@assert-bound-ref
@c snarfed from goops.c:1049
@deffn {Scheme Procedure} @@assert-bound-ref obj index
Like @code{assert-bound}, but use @var{index} for accessing
the value from @var{obj}.
@end deffn

%fast-slot-ref
@c snarfed from goops.c:1061
@deffn {Scheme Procedure} %fast-slot-ref obj index
Return the slot value with index @var{index} from @var{obj}.
@end deffn

%fast-slot-set!
@c snarfed from goops.c:1078
@deffn {Scheme Procedure} %fast-slot-set! obj index value
Set the slot with index @var{index} in @var{obj} to
@var{value}.
@end deffn

slot-ref-using-class
@c snarfed from goops.c:1206
@deffn {Scheme Procedure} slot-ref-using-class class obj slot_name

@end deffn

slot-set-using-class!
@c snarfed from goops.c:1225
@deffn {Scheme Procedure} slot-set-using-class! class obj slot_name value

@end deffn

slot-bound-using-class?
@c snarfed from goops.c:1239
@deffn {Scheme Procedure} slot-bound-using-class? class obj slot_name

@end deffn

slot-exists-using-class?
@c snarfed from goops.c:1254
@deffn {Scheme Procedure} slot-exists-using-class? class obj slot_name

@end deffn

slot-ref
@c snarfed from goops.c:1270
@deffn {Scheme Procedure} slot-ref obj slot_name
Return the value from @var{obj}'s slot with the name
@var{slot_name}.
@end deffn

slot-set!
@c snarfed from goops.c:1287
@deffn {Scheme Procedure} slot-set! obj slot_name value
Set the slot named @var{slot_name} of @var{obj} to @var{value}.
@end deffn

slot-bound?
@c snarfed from goops.c:1304
@deffn {Scheme Procedure} slot-bound? obj slot_name
Return @code{#t} if the slot named @var{slot_name} of @var{obj}
is bound.
@end deffn

slot-exists?
@c snarfed from goops.c:1322
@deffn {Scheme Procedure} slot-exists? obj slot_name
Return @code{#t} if @var{obj} has a slot named @var{slot_name}.
@end deffn

%allocate-instance
@c snarfed from goops.c:1366
@deffn {Scheme Procedure} %allocate-instance class initargs
Create a new instance of class @var{class} and initialize it
from the arguments @var{initargs}.
@end deffn

%set-object-setter!
@c snarfed from goops.c:1439
@deffn {Scheme Procedure} %set-object-setter! obj setter

@end deffn

%modify-instance
@c snarfed from goops.c:1464
@deffn {Scheme Procedure} %modify-instance old new

@end deffn

%modify-class
@c snarfed from goops.c:1490
@deffn {Scheme Procedure} %modify-class old new

@end deffn

%invalidate-class
@c snarfed from goops.c:1514
@deffn {Scheme Procedure} %invalidate-class class

@end deffn

%invalidate-method-cache!
@c snarfed from goops.c:1637
@deffn {Scheme Procedure} %invalidate-method-cache! gf

@end deffn

generic-capability?
@c snarfed from goops.c:1663
@deffn {Scheme Procedure} generic-capability? proc

@end deffn

enable-primitive-generic!
@c snarfed from goops.c:1676
@deffn {Scheme Procedure} enable-primitive-generic! . subrs

@end deffn

primitive-generic-generic
@c snarfed from goops.c:1696
@deffn {Scheme Procedure} primitive-generic-generic subr

@end deffn

make
@c snarfed from goops.c:2056
@deffn {Scheme Procedure} make . args
Make a new object.  @var{args} must contain the class and
all necessary initialization information.
@end deffn

find-method
@c snarfed from goops.c:2149
@deffn {Scheme Procedure} find-method . l

@end deffn

%method-more-specific?
@c snarfed from goops.c:2169
@deffn {Scheme Procedure} %method-more-specific? m1 m2 targs

@end deffn

%goops-loaded
@c snarfed from goops.c:2696
@deffn {Scheme Procedure} %goops-loaded
Announce that GOOPS is loaded and perform initialization
on the C level which depends on the loaded GOOPS modules.
@end deffn

make-guardian
@c snarfed from guardians.c:334
@deffn {Scheme Procedure} make-guardian [greedy_p]
Create a new guardian.
A guardian protects a set of objects from garbage collection,
allowing a program to apply cleanup or other actions.

@code{make-guardian} returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the
argument to the guardian's set of protected objects.
Calling the guardian procedure without an argument returns
one of the protected objects which are ready for garbage
collection, or @code{#f} if no such object is available.
Objects which are returned in this way are removed from
the guardian.

@code{make-guardian} takes one optional argument that says whether the
new guardian should be greedy or sharing.  If there is any chance
that any object protected by the guardian may be resurrected,
then you should make the guardian greedy (this is the default).

See R. Kent Dybvig, Carl Bruggeman, and David Eby (1993)
"Guardians in a Generation-Based Garbage Collector".
ACM SIGPLAN Conference on Programming Language Design
and Implementation, June 1993.

(the semantics are slightly different at this point, but the
paper still (mostly) accurately describes the interface).
@end deffn

guardian-destroyed?
@c snarfed from guardians.c:362
@deffn {Scheme Procedure} guardian-destroyed? guardian
Return @code{#t} if @var{guardian} has been destroyed, otherwise @code{#f}.
@end deffn

guardian-greedy?
@c snarfed from guardians.c:380
@deffn {Scheme Procedure} guardian-greedy? guardian
Return @code{#t} if @var{guardian} is a greedy guardian, otherwise @code{#f}.
@end deffn

destroy-guardian!
@c snarfed from guardians.c:391
@deffn {Scheme Procedure} destroy-guardian! guardian
Destroys @var{guardian}, by making it impossible to put any more
objects in it or get any objects from it.  It also unguards any
objects guarded by @var{guardian}.
@end deffn

hashq
@c snarfed from hash.c:201
@deffn {Scheme Procedure} hashq key size
Determine a hash value for @var{key} that is suitable for
lookups in a hashtable of size @var{size}, where @code{eq?} is
used as the equality predicate.  The function returns an
integer in the range 0 to @var{size} - 1.  Note that
@code{hashq} may use internal addresses.  Thus two calls to
hashq where the keys are @code{eq?} are not guaranteed to
deliver the same value if the key object gets garbage collected
in between.  This can happen, for example with symbols:
@code{(hashq 'foo n) (gc) (hashq 'foo n)} may produce two
different values, since @code{foo} will be garbage collectedo @var{size} - 1.  ing?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{default_value} is returned.
@end deffn

%initialize-object
@c snarfed from goops.c:400
@deffn {Scheme Procedure} %initialize-object obj initargs
Initialize the object @var{obj} with the given arguments
@var{initargs}.
@end deffn

%prep-layout!
@c snarfed from goops.c:499
@deffn {Scheme Procedure} %prep-layout! class

@end deffn

%inherit-magic!
@c snarfed from goops.c:605
@deffn {Scheme Procedure} %inherit-magic! class dsupers

@end deffn

instance?
@c snarfed from goops.c:846
@deffn {Scheme Procedure} instance? obj
Return @code{#t} if @var{obj} is an instance.
@end deffn

class-name
@c snarfed from goops.c:861
@deffn {Scheme Procedure} class-name obj
Return the class name of @var{obj}.
@end deffn

class-direct-supers
@c snarfed from goops.c:871
@deffn {Scheme Procedure} class-direct-supers obj
Return the direct superclasses of the class @var{obj}.
@end deffn

class-direct-slots
@c snarfed from goops.c:881
@deffn {Scheme Procedure} class-direct-slots obj
Return the direct slots of the class @var{obj}.
@end deffn

class-direct-subclasses
@c snarfed from goops.c:891
@deffn {Scheme Procedure} class-direct-subclasses obj
Return the direct subclasses of the class @var{obj}.
@end deffn

class-direct-methods
@c snarfed from goops.c:901
@deffn {Scheme Procedure} class-direct-methods obj
Return the direct methods of the class @var{obj}
@end deffn

class-precedence-list
@c snarfed from goops.c:911
@deffn {Scheme Procedure} class-precedence-list obj
Return the class precedence list of the class @var{obj}.
@end deffn

class-slots
@c snarfed from goops.c:921
@deffn {Scheme Procedure} class-slots obj
Return the slot list of the class @var{obj}.
@end deffn

class-environment
@c snarfed from goops.c:931
@deffn {Scheme Procedure} class-environment obj
Return the environment of the class @var{obj}.
@end deffn

generic-function-name
@c snarfed from goops.c:942
@deffn {Scheme Procedure} generic-function-name obj
Return the name of the generic function @var{obj}.
@end deffn

generic-function-methods
@c snarfed from goops.c:952
@deffn {Scheme Procedure} generic-function-methods obj
Return the methods of the generic function @var{obj}.
@end deffn

method-generic-function
@c snarfed from goops.c:963
@deffn {Scheme Procedure} method-generic-function obj
Return the generic function for the method @var{obj}.
@end deffn

method-specializers
@c snarfed from goops.c:973
@deffn {Scheme Procedure} method-specializers obj
Return specializers of the method @var{obj}.
@end deffn

method-procedure
@c snarfed from goops.c:983
@deffn {Scheme Procedure} method-procedure obj
Return the procedure of the method @var{obj}.
@end deffn

accessor-method-slot-definition
@c snarfed from goops.c:993
@deffn {Scheme Procedure} accessor-method-slot-definition obj
Return the slot definition of the accessor @var{obj}.
@end deffn

%tag-body
@c snarfed from goops.c:1003
@deffn {Scheme Procedure} %tag-body body
Internal GOOPS magic---don't use this function!
@end deffn

make-unbound
@c snarfed from goops.c:1018
@deffn {Scheme Procedure} make-unbound
Return the unbound value.
@end deffn

unbound?
@c snarfed from goops.c:1027
@deffn {Scheme Procedure} unbound? obj
Return @code{#t} if @var{obj} is unbound.
@end deffn

assert-bound
@c snarfed from goops.c:1037
@deffn {Scheme Procedure} assert-bound value obj
Return @var{value} if it is bound, and invoke the
@var{slot-unbound} method of @var{obj} if it is not.
@end deffn

@@assert-bound-ref
@c snarfed from goops.c:1049
@deffn {Scheme Procedure} @@assert-bound-ref obj index
Like @code{assert-bound}, but use @var{index} for accessing
the value from @var{obj}.
@end deffn

%fast-slot-ref
@c snarfed from goops.c:1061
@deffn {Scheme Procedure} %fast-slot-ref obj index
Return the slot value with index @var{index} from @var{obj}.
@end deffn

%fast-slot-set!
@c snarfed from goops.c:1078
@deffn {Scheme Procedure} %fast-slot-set! obj index value
Set the slot with index @var{index} in @var{obj} to
@var{value}.
@end deffn

slot-ref-using-class
@c snarfed from goops.c:1206
@deffn {Scheme Procedure} slot-ref-using-class class obj slot_name

@end deffn

slot-set-using-class!
@c snarfed from goops.c:1225
@deffn {Scheme Procedure} slot-set-using-class! class obj slot_name value

@end deffn

slot-bound-using-class?
@c snarfed from goops.c:1239
@deffn {Scheme Procedure} slot-bound-using-class? class obj slot_name

@end deffn

slot-exists-using-class?
@c snarfed from goops.c:1254
@deffn {Scheme Procedure} slot-exists-using-class? class obj slot_name

@end deffn

slot-ref
@c snarfed from goops.c:1270
@deffn {Scheme Procedure} slot-ref obj slot_name
Return the value from @var{obj}'s slot with the name
@var{slot_name}.
@end deffn

slot-set!
@c snarfed from goops.c:1287
@deffn {Scheme Procedure} slot-set! obj slot_name value
Set the slot named @var{slot_name} of @var{obj} to @var{value}.
@end deffn

slot-bound?
@c snarfed from goops.c:1304
@deffn {Scheme Procedure} slot-bound? obj slot_name
Return @code{#t} if the slot named @var{slot_name} of @var{obj}
is bound.
@end deffn

slot-exists?
@c snarfed from goops.c:1322
@deffn {Scheme Procedure} slot-exists? obj slot_name
Return @code{#t} if @var{obj} has a slot named @var{slot_name}.
@end deffn

%allocate-instance
@c snarfed from goops.c:1366
@deffn {Scheme Procedure} %allocate-instance class initargs
Create a new instance of class @var{class} and initialize it
from the arguments @var{initargs}.
@end deffn

%set-object-setter!
@c snarfed from goops.c:1439
@deffn {Scheme Procedure} %set-object-setter! obj setter

@end deffn

%modify-instance
@c snarfed from goops.c:1464
@deffn {Scheme Procedure} %modify-instance old new

@end deffn

%modify-class
@c snarfed from goops.c:1490
@deffn {Scheme Procedure} %modify-class old new

@end deffn

%invalidate-class
@c snarfed from goops.c:1514
@deffn {Scheme Procedure} %invalidate-class class

@end deffn

%invalidate-method-cache!
@c snarfed from goops.c:1637
@deffn {Scheme Procedure} %invalidate-method-cache! gf

@end deffn

generic-capability?
@c snarfed from goops.c:1663
@deffn {Scheme Procedure} generic-capability? proc

@end deffn

enable-primitive-generic!
@c snarfed from goops.c:1676
@deffn {Scheme Procedure} enable-primitive-generic! . subrs

@end deffn

primitive-generic-generic
@c snarfed from goops.c:1696
@deffn {Scheme Procedure} primitive-generic-generic subr

@end deffn

make
@c snarfed from goops.c:2056
@deffn {Scheme Procedure} make . args
Make a new object.  @var{args} must contain the class and
all necessary initialization information.
@end deffn

find-method
@c snarfed from goops.c:2149
@deffn {Scheme Procedure} find-method . l

@end deffn

%method-more-specific?
@c snarfed from goops.c:2169
@deffn {Scheme Procedure} %method-more-specific? m1 m2 targs

@end deffn

%goops-loaded
@c snarfed from goops.c:2696
@deffn {Scheme Procedure} %goops-loaded
Announce that GOOPS is loaded and perform initialization
on the C level which depends on the loaded GOOPS modules.
@end deffn

make-guardian
@c snarfed from guardians.c:334
@deffn {Scheme Procedure} make-guardian [greedy_p]
Create a new guardian.
A guardian protects a set of objects from garbage collection,
allowing a program to apply cleanup or other actions.

@code{make-guardian} returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the
argument to the guardian's set of protected objects.
Calling the guardian procedure without an argument returns
one of the protected objects which are ready for garbage
collection, or @code{#f} if no such object is available.
Objects which are returned in this way are removed from
the guardian.

@code{make-guardian} takes one optional argument that says whether the
new guardian should be greedy or sharing.  If there is any chance
that any object protected by the guardian may be resurrected,
then you should make the guardian greedy (this is the default).

See R. Kent Dybvig, Carl Bruggeman, and David Eby (1993)
"Guardians in a Generation-Based Garbage Collector".
ACM SIGPLAN Conference on Programming Language Design
and Implementation, June 1993.

(the semantics are slightly different at this point, but the
paper still (mostly) accurately describes the interface).
@end deffn

guardian-destroyed?
@c snarfed from guardians.c:362
@deffn {Scheme Procedure} guardian-destroyed? guardian
Return @code{#t} if @var{guardian} has been destroyed, otherwise @code{#f}.
@end deffn

guardian-greedy?
@c snarfed from guardians.c:380
@deffn {Scheme Procedure} guardian-greedy? guardian
Return @code{#t} if @var{guardian} is a greedy guardian, otherwise @code{#f}.
@end deffn

destroy-guardian!
@c snarfed from guardians.c:391
@deffn {Scheme Procedure} destroy-guardian! guardian
Destroys @var{guardian}, by making it impossible to put any more
objects in it or get any objects from it.  It also unguards any
objects guarded by @var{guardian}.
@end deffn

hashq
@c snarfed from hash.c:201
@deffn {Scheme Procedure} hashq key size
Determine a hash value for @var{key} that is suitable for
lookups in a hashtable of size @var{size}, where @code{eq?} is
used as the equality predicate.  The function returns an
integer in the range 0 to @var{size} - 1.  Note that
@code{hashq} may use internal addresses.  Thus two calls to
hashq where the keys are @code{eq?} are not guaranteed to
deliver the same value if the key object gets garbage collected
in between.  This can happen, for example with symbols:
@code{(hashq 'foo n) (gc) (hashq 'foo n)} may produce two
different values, since @code{foo} will be garbage collectedo @var{size} - 1.  ing?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{default_value} is returned.
@end deffn

%initialize-object
@c snarfed from goops.c:400
@deffn {Scheme Procedure} %initialize-object obj initargs
Initialize the object @var{obj} with the given arguments
@var{initargs}.
@end deffn

%prep-layout!
@c snarfed from goops.c:499
@deffn {Scheme Procedure} %prep-layout! class

@end deffn

%inherit-magic!
@c snarfed from goops.c:605
@deffn {Scheme Procedure} %inherit-magic! class dsupers

@end deffn

instance?
@c snarfed from goops.c:846
@deffn {Scheme Procedure} instance? obj
Return @code{#t} if @var{obj} is an instance.
@end deffn

class-name
@c snarfed from goops.c:861
@deffn {Scheme Procedure} class-name obj
Return the class name of @var{obj}.
@end deffn

class-direct-supers
@c snarfed from goops.c:871
@deffn {Scheme Procedure} class-direct-supers obj
Return the direct superclasses of the class @var{obj}.
@end deffn

class-direct-slots
@c snarfed from goops.c:881
@deffn {Scheme Procedure} class-direct-slots obj
Return the direct slots of the class @var{obj}.
@end deffn

class-direct-subclasses
@c snarfed from goops.c:891
@deffn {Scheme Procedure} class-direct-subclasses obj
Return the direct subclasses of the class @var{obj}.
@end deffn

class-direct-methods
@c snarfed from goops.c:901
@deffn {Scheme Procedure} class-direct-methods obj
Return the direct methods of the class @var{obj}
@end deffn

class-precedence-list
@c snarfed from goops.c:911
@deffn {Scheme Procedure} class-precedence-list obj
Return the class precedence list of the class @var{obj}.
@end deffn

class-slots
@c snarfed from goops.c:921
@deffn {Scheme Procedure} class-slots obj
Return the slot list of the class @var{obj}.
@end deffn

class-environment
@c snarfed from goops.c:931
@deffn {Scheme Procedure} class-environment obj
Return the environment of the class @var{obj}.
@end deffn

generic-function-name
@c snarfed from goops.c:942
@deffn {Scheme Procedure} generic-function-name obj
Return the name of the generic function @var{obj}.
@end deffn

generic-function-methods
@c snarfed from goops.c:952
@deffn {Scheme Procedure} generic-function-methods obj
Return the methods of the generic function @var{obj}.
@end deffn

method-generic-function
@c snarfed from goops.c:963
@deffn {Scheme Procedure} method-generic-function obj
Return the generic function for the method @var{obj}.
@end deffn

method-specializers
@c snarfed from goops.c:973
@deffn {Scheme Procedure} method-specializers obj
Return specializers of the method @var{obj}.
@end deffn

method-procedure
@c snarfed from goops.c:983
@deffn {Scheme Procedure} method-procedure obj
Return the procedure of the method @var{obj}.
@end deffn

accessor-method-slot-definition
@c snarfed from goops.c:993
@deffn {Scheme Procedure} accessor-method-slot-definition obj
Return the slot definition of the accessor @var{obj}.
@end deffn

%tag-body
@c snarfed from goops.c:1003
@deffn {Scheme Procedure} %tag-body body
Internal GOOPS magic---don't use this function!
@end deffn

make-unbound
@c snarfed from goops.c:1018
@deffn {Scheme Procedure} make-unbound
Return the unbound value.
@end deffn

unbound?
@c snarfed from goops.c:1027
@deffn {Scheme Procedure} unbound? obj
Return @code{#t} if @var{obj} is unbound.
@end deffn

assert-bound
@c snarfed from goops.c:1037
@deffn {Scheme Procedure} assert-bound value obj
Return @var{value} if it is bound, and invoke the
@var{slot-unbound} method of @var{obj} if it is not.
@end deffn

@@assert-bound-ref
@c snarfed from goops.c:1049
@deffn {Scheme Procedure} @@assert-bound-ref obj index
Like @code{assert-bound}, but use @var{index} for accessing
the value from @var{obj}.
@end deffn

%fast-slot-ref
@c snarfed from goops.c:1061
@deffn {Scheme Procedure} %fast-slot-ref obj index
Return the slot value with index @var{index} from @var{obj}.
@end deffn

%fast-slot-set!
@c snarfed from goops.c:1078
@deffn {Scheme Procedure} %fast-slot-set! obj index value
Set the slot with index @var{index} in @var{obj} to
@var{value}.
@end deffn

slot-ref-using-class
@c snarfed from goops.c:1206
@deffn {Scheme Procedure} slot-ref-using-class class obj slot_name

@end deffn

slot-set-using-class!
@c snarfed from goops.c:1225
@deffn {Scheme Procedure} slot-set-using-class! class obj slot_name value

@end deffn

slot-bound-using-class?
@c snarfed from goops.c:1239
@deffn {Scheme Procedure} slot-bound-using-class? class obj slot_name

@end deffn

slot-exists-using-class?
@c snarfed from goops.c:1254
@deffn {Scheme Procedure} slot-exists-using-class? class obj slot_name

@end deffn

slot-ref
@c snarfed from goops.c:1270
@deffn {Scheme Procedure} slot-ref obj slot_name
Return the value from @var{obj}'s slot with the name
@var{slot_name}.
@end deffn

slot-set!
@c snarfed from goops.c:1287
@deffn {Scheme Procedure} slot-set! obj slot_name value
Set the slot named @var{slot_name} of @var{obj} to @var{value}.
@end deffn

slot-bound?
@c snarfed from goops.c:1304
@deffn {Scheme Procedure} slot-bound? obj slot_name
Return @code{#t} if the slot named @var{slot_name} of @var{obj}
is bound.
@end deffn

slot-exists?
@c snarfed from goops.c:1322
@deffn {Scheme Procedure} slot-exists? obj slot_name
Return @code{#t} if @var{obj} has a slot named @var{slot_name}.
@end deffn

%allocate-instance
@c snarfed from goops.c:1366
@deffn {Scheme Procedure} %allocate-instance class initargs
Create a new instance of class @var{class} and initialize it
from the arguments @var{initargs}.
@end deffn

%set-object-setter!
@c snarfed from goops.c:1439
@deffn {Scheme Procedure} %set-object-setter! obj setter

@end deffn

%modify-instance
@c snarfed from goops.c:1464
@deffn {Scheme Procedure} %modify-instance old new

@end deffn

%modify-class
@c snarfed from goops.c:1490
@deffn {Scheme Procedure} %modify-class old new

@end deffn

%invalidate-class
@c snarfed from goops.c:1514
@deffn {Scheme Procedure} %invalidate-class class

@end deffn

%invalidate-method-cache!
@c snarfed from goops.c:1637
@deffn {Scheme Procedure} %invalidate-method-cache! gf

@end deffn

generic-capability?
@c snarfed from goops.c:1663
@deffn {Scheme Procedure} generic-capability? proc

@end deffn

enable-primitive-generic!
@c snarfed from goops.c:1676
@deffn {Scheme Procedure} enable-primitive-generic! . subrs

@end deffn

primitive-generic-generic
@c snarfed from goops.c:1696
@deffn {Scheme Procedure} primitive-generic-generic subr

@end deffn

make
@c snarfed from goops.c:2056
@deffn {Scheme Procedure} make . args
Make a new object.  @var{args} must contain the class and
all necessary initialization information.
@end deffn

find-method
@c snarfed from goops.c:2149
@deffn {Scheme Procedure} find-method . l

@end deffn

%method-more-specific?
@c snarfed from goops.c:2169
@deffn {Scheme Procedure} %method-more-specific? m1 m2 targs

@end deffn

%goops-loaded
@c snarfed from goops.c:2696
@deffn {Scheme Procedure} %goops-loaded
Announce that GOOPS is loaded and perform initialization
on the C level which depends on the loaded GOOPS modules.
@end deffn

make-guardian
@c snarfed from guardians.c:334
@deffn {Scheme Procedure} make-guardian [greedy_p]
Create a new guardian.
A guardian protects a set of objects from garbage collection,
allowing a program to apply cleanup or other actions.

@code{make-guardian} returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the
argument to the guardian's set of protected objects.
Calling the guardian procedure without an argument returns
one of the protected objects which are ready for garbage
collection, or @code{#f} if no such object is available.
Objects which are returned in this way are removed from
the guardian.

@code{make-guardian} takes one optional argument that says whether the
new guardian should be greedy or sharing.  If there is any chance
that any object protected by the guardian may be resurrected,
then you should make the guardian greedy (this is the default).

See R. Kent Dybvig, Carl Bruggeman, and David Eby (1993)
"Guardians in a Generation-Based Garbage Collector".
ACM SIGPLAN Conference on Programming Language Design
and Implementation, June 1993.

(the semantics are slightly different at this point, but the
paper still (mostly) accurately describes the interface).
@end deffn

guardian-destroyed?
@c snarfed from guardians.c:362
@deffn {Scheme Procedure} guardian-destroyed? guardian
Return @code{#t} if @var{guardian} has been destroyed, otherwise @code{#f}.
@end deffn

guardian-greedy?
@c snarfed from guardians.c:380
@deffn {Scheme Procedure} guardian-greedy? guardian
Return @code{#t} if @var{guardian} is a greedy guardian, otherwise @code{#f}.
@end deffn

destroy-guardian!
@c snarfed from guardians.c:391
@deffn {Scheme Procedure} destroy-guardian! guardian
Destroys @var{guardian}, by making it impossible to put any more
objects in it or get any objects from it.  It also unguards any
objects guarded by @var{guardian}.
@end deffn

hashq
@c snarfed from hash.c:201
@deffn {Scheme Procedure} hashq key size
Determine a hash value for @var{key} that is suitable for
lookups in a hashtable of size @var{size}, where @code{eq?} is
used as the equality predicate.  The function returns an
integer in the range 0 to @var{size} - 1.  Note that
@code{hashq} may use internal addresses.  Thus two calls to
hashq where the keys are @code{eq?} are not guaranteed to
deliver the same value if the key object gets garbage collected
in between.  This can happen, for example with symbols:
@code{(hashq 'foo n) (gc) (hashq 'foo n)} may produce two
different values, since @code{foo} will be garbage collectedo @var{size} - 1.  ing?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{default_value} is returned.
@end deffn

%initialize-object
@c snarfed from goops.c:400
@deffn {Scheme Procedure} %initialize-object obj initargs
Initialize the object @var{obj} with the given arguments
@var{initargs}.
@end deffn

%prep-layout!
@c snarfed from goops.c:499
@deffn {Scheme Procedure} %prep-layout! class

@end deffn

%inherit-magic!
@c snarfed from goops.c:605
@deffn {Scheme Procedure} %inherit-magic! class dsupers

@end deffn

instance?
@c snarfed from goops.c:846
@deffn {Scheme Procedure} instance? obj
Return @code{#t} if @var{obj} is an instance.
@end deffn

class-name
@c snarfed from goops.c:861
@deffn {Scheme Procedure} class-name obj
Return the class name of @var{obj}.
@end deffn

class-direct-supers
@c snarfed from goops.c:871
@deffn {Scheme Procedure} class-direct-supers obj
Return the direct superclasses of the class @var{obj}.
@end deffn

class-direct-slots
@c snarfed from goops.c:881
@deffn {Scheme Procedure} class-direct-slots obj
Return the direct slots of the class @var{obj}.
@end deffn

class-direct-subclasses
@c snarfed from goops.c:891
@deffn {Scheme Procedure} class-direct-subclasses obj
Return the direct subclasses of the class @var{obj}.
@end deffn

class-direct-methods
@c snarfed from goops.c:901
@deffn {Scheme Procedure} class-direct-methods obj
Return the direct methods of the class @var{obj}
@end deffn

class-precedence-list
@c snarfed from goops.c:911
@deffn {Scheme Procedure} class-precedence-list obj
Return the class precedence list of the class @var{obj}.
@end deffn

class-slots
@c snarfed from goops.c:921
@deffn {Scheme Procedure} class-slots obj
Return the slot list of the class @var{obj}.
@end deffn

class-environment
@c snarfed from goops.c:931
@deffn {Scheme Procedure} class-environment obj
Return the environment of the class @var{obj}.
@end deffn

generic-function-name
@c snarfed from goops.c:942
@deffn {Scheme Procedure} generic-function-name obj
Return the name of the generic function @var{obj}.
@end deffn

generic-function-methods
@c snarfed from goops.c:952
@deffn {Scheme Procedure} generic-function-methods obj
Return the methods of the generic function @var{obj}.
@end deffn

method-generic-function
@c snarfed from goops.c:963
@deffn {Scheme Procedure} method-generic-function obj
Return the generic function for the method @var{obj}.
@end deffn

method-specializers
@c snarfed from goops.c:973
@deffn {Scheme Procedure} method-specializers obj
Return specializers of the method @var{obj}.
@end deffn

method-procedure
@c snarfed from goops.c:983
@deffn {Scheme Procedure} method-procedure obj
Return the procedure of the method @var{obj}.
@end deffn

accessor-method-slot-definition
@c snarfed from goops.c:993
@deffn {Scheme Procedure} accessor-method-slot-definition obj
Return the slot definition of the accessor @var{obj}.
@end deffn

%tag-body
@c snarfed from goops.c:1003
@deffn {Scheme Procedure} %tag-body body
Internal GOOPS magic---don't use this function!
@end deffn

make-unbound
@c snarfed from goops.c:1018
@deffn {Scheme Procedure} make-unbound
Return the unbound value.
@end deffn

unbound?
@c snarfed from goops.c:1027
@deffn {Scheme Procedure} unbound? obj
Return @code{#t} if @var{obj} is unbound.
@end deffn

assert-bound
@c snarfed from goops.c:1037
@deffn {Scheme Procedure} assert-bound value obj
Return @var{value} if it is bound, and invoke the
@var{slot-unbound} method of @var{obj} if it is not.
@end deffn

@@assert-bound-ref
@c snarfed from goops.c:1049
@deffn {Scheme Procedure} @@assert-bound-ref obj index
Like @code{assert-bound}, but use @var{index} for accessing
the value from @var{obj}.
@end deffn

%fast-slot-ref
@c snarfed from goops.c:1061
@deffn {Scheme Procedure} %fast-slot-ref obj index
Return the slot value with index @var{index} from @var{obj}.
@end deffn

%fast-slot-set!
@c snarfed from goops.c:1078
@deffn {Scheme Procedure} %fast-slot-set! obj index value
Set the slot with index @var{index} in @var{obj} to
@var{value}.
@end deffn

slot-ref-using-class
@c snarfed from goops.c:1206
@deffn {Scheme Procedure} slot-ref-using-class class obj slot_name

@end deffn

slot-set-using-class!
@c snarfed from goops.c:1225
@deffn {Scheme Procedure} slot-set-using-class! class obj slot_name value

@end deffn

slot-bound-using-class?
@c snarfed from goops.c:1239
@deffn {Scheme Procedure} slot-bound-using-class? class obj slot_name

@end deffn

slot-exists-using-class?
@c snarfed from goops.c:1254
@deffn {Scheme Procedure} slot-exists-using-class? class obj slot_name

@end deffn

slot-ref
@c snarfed from goops.c:1270
@deffn {Scheme Procedure} slot-ref obj slot_name
Return the value from @var{obj}'s slot with the name
@var{slot_name}.
@end deffn

slot-set!
@c snarfed from goops.c:1287
@deffn {Scheme Procedure} slot-set! obj slot_name value
Set the slot named @var{slot_name} of @var{obj} to @var{value}.
@end deffn

slot-bound?
@c snarfed from goops.c:1304
@deffn {Scheme Procedure} slot-bound? obj slot_name
Return @code{#t} if the slot named @var{slot_name} of @var{obj}
is bound.
@end deffn

slot-exists?
@c snarfed from goops.c:1322
@deffn {Scheme Procedure} slot-exists? obj slot_name
Return @code{#t} if @var{obj} has a slot named @var{slot_name}.
@end deffn

%allocate-instance
@c snarfed from goops.c:1366
@deffn {Scheme Procedure} %allocate-instance class initargs
Create a new instance of class @var{class} and initialize it
from the arguments @var{initargs}.
@end deffn

%set-object-setter!
@c snarfed from goops.c:1439
@deffn {Scheme Procedure} %set-object-setter! obj setter

@end deffn

%modify-instance
@c snarfed from goops.c:1464
@deffn {Scheme Procedure} %modify-instance old new

@end deffn

%modify-class
@c snarfed from goops.c:1490
@deffn {Scheme Procedure} %modify-class old new

@end deffn

%invalidate-class
@c snarfed from goops.c:1514
@deffn {Scheme Procedure} %invalidate-class class

@end deffn

%invalidate-method-cache!
@c snarfed from goops.c:1637
@deffn {Scheme Procedure} %invalidate-method-cache! gf

@end deffn

generic-capability?
@c snarfed from goops.c:1663
@deffn {Scheme Procedure} generic-capability? proc

@end deffn

enable-primitive-generic!
@c snarfed from goops.c:1676
@deffn {Scheme Procedure} enable-primitive-generic! . subrs

@end deffn

primitive-generic-generic
@c snarfed from goops.c:1696
@deffn {Scheme Procedure} primitive-generic-generic subr

@end deffn

make
@c snarfed from goops.c:2056
@deffn {Scheme Procedure} make . args
Make a new object.  @var{args} must contain the class and
all necessary initialization information.
@end deffn

find-method
@c snarfed from goops.c:2149
@deffn {Scheme Procedure} find-method . l

@end deffn

%method-more-specific?
@c snarfed from goops.c:2169
@deffn {Scheme Procedure} %method-more-specific? m1 m2 targs

@end deffn

%goops-loaded
@c snarfed from goops.c:2696
@deffn {Scheme Procedure} %goops-loaded
Announce that GOOPS is loaded and perform initialization
on the C level which depends on the loaded GOOPS modules.
@end deffn

make-guardian
@c snarfed from guardians.c:334
@deffn {Scheme Procedure} make-guardian [greedy_p]
Create a new guardian.
A guardian protects a set of objects from garbage collection,
allowing a program to apply cleanup or other actions.

@code{make-guardian} returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the
argument to the guardian's set of protected objects.
Calling the guardian procedure without an argument returns
one of the protected objects which are ready for garbage
collection, or @code{#f} if no such object is available.
Objects which are returned in this way are removed from
the guardian.

@code{make-guardian} takes one optional argument that says whether the
new guardian should be greedy or sharing.  If there is any chance
that any object protected by the guardian may be resurrected,
then you should make the guardian greedy (this is the default).

See R. Kent Dybvig, Carl Bruggeman, and David Eby (1993)
"Guardians in a Generation-Based Garbage Collector".
ACM SIGPLAN Conference on Programming Language Design
and Implementation, June 1993.

(the semantics are slightly different at this point, but the
paper still (mostly) accurately describes the interface).
@end deffn

guardian-destroyed?
@c snarfed from guardians.c:362
@deffn {Scheme Procedure} guardian-destroyed? guardian
Return @code{#t} if @var{guardian} has been destroyed, otherwise @code{#f}.
@end deffn

guardian-greedy?
@c snarfed from guardians.c:380
@deffn {Scheme Procedure} guardian-greedy? guardian
Return @code{#t} if @var{guardian} is a greedy guardian, otherwise @code{#f}.
@end deffn

destroy-guardian!
@c snarfed from guardians.c:391
@deffn {Scheme Procedure} destroy-guardian! guardian
Destroys @var{guardian}, by making it impossible to put any more
objects in it or get any objects from it.  It also unguards any
objects guarded by @var{guardian}.
@end deffn

hashq
@c snarfed from hash.c:201
@deffn {Scheme Procedure} hashq key size
Determine a hash value for @var{key} that is suitable for
lookups in a hashtable of size @var{size}, where @code{eq?} is
used as the equality predicate.  The function returns an
integer in the range 0 to @var{size} - 1.  Note that
@code{hashq} may use internal addresses.  Thus two calls to
hashq where the keys are @code{eq?} are not guaranteed to
deliver the same value if the key object gets garbage collected
in between.  This can happen, for example with symbols:
@code{(hashq 'foo n) (gc) (hashq 'foo n)} may produce two
different values, since @code{foo} will be garbage collectedo @var{size} - 1.  ing?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{default_value} is returned.
@end deffn

%initialize-object
@c snarfed from goops.c:400
@deffn {Scheme Procedure} %initialize-object obj initargs
Initialize the object @var{obj} with the given arguments
@var{initargs}.
@end deffn

%prep-layout!
@c snarfed from goops.c:499
@deffn {Scheme Procedure} %prep-layout! class

@end deffn

%inherit-magic!
@c snarfed from goops.c:605
@deffn {Scheme Procedure} %inherit-magic! class dsupers

@end deffn

instance?
@c snarfed from goops.c:846
@deffn {Scheme Procedure} instance? obj
Return @code{#t} if @var{obj} is an instance.
@end deffn

class-name
@c snarfed from goops.c:861
@deffn {Scheme Procedure} class-name obj
Return the class name of @var{obj}.
@end deffn

class-direct-supers
@c snarfed from goops.c:871
@deffn {Scheme Procedure} class-direct-supers obj
Return the direct superclasses of the class @var{obj}.
@end deffn

class-direct-slots
@c snarfed from goops.c:881
@deffn {Scheme Procedure} class-direct-slots obj
Return the direct slots of the class @var{obj}.
@end deffn

class-direct-subclasses
@c snarfed from goops.c:891
@deffn {Scheme Procedure} class-direct-subclasses obj
Return the direct subclasses of the class @var{obj}.
@end deffn

class-direct-methods
@c snarfed from goops.c:901
@deffn {Scheme Procedure} class-direct-methods obj
Return the direct methods of the class @var{obj}
@end deffn

class-precedence-list
@c snarfed from goops.c:911
@deffn {Scheme Procedure} class-precedence-list obj
Return the class precedence list of the class @var{obj}.
@end deffn

class-slots
@c snarfed from goops.c:921
@deffn {Scheme Procedure} class-slots obj
Return the slot list of the class @var{obj}.
@end deffn

class-environment
@c snarfed from goops.c:931
@deffn {Scheme Procedure} class-environment obj
Return the environment of the class @var{obj}.
@end deffn

generic-function-name
@c snarfed from goops.c:942
@deffn {Scheme Procedure} generic-function-name obj
Return the name of the generic function @var{obj}.
@end deffn

generic-function-methods
@c snarfed from goops.c:952
@deffn {Scheme Procedure} generic-function-methods obj
Return the methods of the generic function @var{obj}.
@end deffn

method-generic-function
@c snarfed from goops.c:963
@deffn {Scheme Procedure} method-generic-function obj
Return the generic function for the method @var{obj}.
@end deffn

method-specializers
@c snarfed from goops.c:973
@deffn {Scheme Procedure} method-specializers obj
Return specializers of the method @var{obj}.
@end deffn

method-procedure
@c snarfed from goops.c:983
@deffn {Scheme Procedure} method-procedure obj
Return the procedure of the method @var{obj}.
@end deffn

accessor-method-slot-definition
@c snarfed from goops.c:993
@deffn {Scheme Procedure} accessor-method-slot-definition obj
Return the slot definition of the accessor @var{obj}.
@end deffn

%tag-body
@c snarfed from goops.c:1003
@deffn {Scheme Procedure} %tag-body body
Internal GOOPS magic---don't use this function!
@end deffn

make-unbound
@c snarfed from goops.c:1018
@deffn {Scheme Procedure} make-unbound
Return the unbound value.
@end deffn

unbound?
@c snarfed from goops.c:1027
@deffn {Scheme Procedure} unbound? obj
Return @code{#t} if @var{obj} is unbound.
@end deffn

assert-bound
@c snarfed from goops.c:1037
@deffn {Scheme Procedure} assert-bound value obj
Return @var{value} if it is bound, and invoke the
@var{slot-unbound} method of @var{obj} if it is not.
@end deffn

@@assert-bound-ref
@c snarfed from goops.c:1049
@deffn {Scheme Procedure} @@assert-bound-ref obj index
Like @code{assert-bound}, but use @var{index} for accessing
the value from @var{obj}.
@end deffn

%fast-slot-ref
@c snarfed from goops.c:1061
@deffn {Scheme Procedure} %fast-slot-ref obj index
Return the slot value with index @var{index} from @var{obj}.
@end deffn

%fast-slot-set!
@c snarfed from goops.c:1078
@deffn {Scheme Procedure} %fast-slot-set! obj index value
Set the slot with index @var{index} in @var{obj} to
@var{value}.
@end deffn

slot-ref-using-class
@c snarfed from goops.c:1206
@deffn {Scheme Procedure} slot-ref-using-class class obj slot_name

@end deffn

slot-set-using-class!
@c snarfed from goops.c:1225
@deffn {Scheme Procedure} slot-set-using-class! class obj slot_name value

@end deffn

slot-bound-using-class?
@c snarfed from goops.c:1239
@deffn {Scheme Procedure} slot-bound-using-class? class obj slot_name

@end deffn

slot-exists-using-class?
@c snarfed from goops.c:1254
@deffn {Scheme Procedure} slot-exists-using-class? class obj slot_name

@end deffn

slot-ref
@c snarfed from goops.c:1270
@deffn {Scheme Procedure} slot-ref obj slot_name
Return the value from @var{obj}'s slot with the name
@var{slot_name}.
@end deffn

slot-set!
@c snarfed from goops.c:1287
@deffn {Scheme Procedure} slot-set! obj slot_name value
Set the slot named @var{slot_name} of @var{obj} to @var{value}.
@end deffn

slot-bound?
@c snarfed from goops.c:1304
@deffn {Scheme Procedure} slot-bound? obj slot_name
Return @code{#t} if the slot named @var{slot_name} of @var{obj}
is bound.
@end deffn

slot-exists?
@c snarfed from goops.c:1322
@deffn {Scheme Procedure} slot-exists? obj slot_name
Return @code{#t} if @var{obj} has a slot named @var{slot_name}.
@end deffn

%allocate-instance
@c snarfed from goops.c:1366
@deffn {Scheme Procedure} %allocate-instance class initargs
Create a new instance of class @var{class} and initialize it
from the arguments @var{initargs}.
@end deffn

%set-object-setter!
@c snarfed from goops.c:1439
@deffn {Scheme Procedure} %set-object-setter! obj setter

@end deffn

%modify-instance
@c snarfed from goops.c:1464
@deffn {Scheme Procedure} %modify-instance old new

@end deffn

%modify-class
@c snarfed from goops.c:1490
@deffn {Scheme Procedure} %modify-class old new

@end deffn

%invalidate-class
@c snarfed from goops.c:1514
@deffn {Scheme Procedure} %invalidate-class class

@end deffn

%invalidate-method-cache!
@c snarfed from goops.c:1637
@deffn {Scheme Procedure} %invalidate-method-cache! gf

@end deffn

generic-capability?
@c snarfed from goops.c:1663
@deffn {Scheme Procedure} generic-capability? proc

@end deffn

enable-primitive-generic!
@c snarfed from goops.c:1676
@deffn {Scheme Procedure} enable-primitive-generic! . subrs

@end deffn

primitive-generic-generic
@c snarfed from goops.c:1696
@deffn {Scheme Procedure} primitive-generic-generic subr

@end deffn

make
@c snarfed from goops.c:2056
@deffn {Scheme Procedure} make . args
Make a new object.  @var{args} must contain the class and
all necessary initialization information.
@end deffn

find-method
@c snarfed from goops.c:2149
@deffn {Scheme Procedure} find-method . l

@end deffn

%method-more-specific?
@c snarfed from goops.c:2169
@deffn {Scheme Procedure} %method-more-specific? m1 m2 targs

@end deffn

%goops-loaded
@c snarfed from goops.c:2696
@deffn {Scheme Procedure} %goops-loaded
Announce that GOOPS is loaded and perform initialization
on the C level which depends on the loaded GOOPS modules.
@end deffn

make-guardian
@c snarfed from guardians.c:334
@deffn {Scheme Procedure} make-guardian [greedy_p]
Create a new guardian.
A guardian protects a set of objects from garbage collection,
allowing a program to apply cleanup or other actions.

@code{make-guardian} returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the
argument to the guardian's set of protected objects.
Calling the guardian procedure without an argument returns
one of the protected objects which are ready for garbage
collection, or @code{#f} if no such object is available.
Objects which are returned in this way are removed from
the guardian.

@code{make-guardian} takes one optional argument that says whether the
new guardian should be greedy or sharing.  If there is any chance
that any object protected by the guardian may be resurrected,
then you should make the guardian greedy (this is the default).

See R. Kent Dybvig, Carl Bruggeman, and David Eby (1993)
"Guardians in a Generation-Based Garbage Collector".
ACM SIGPLAN Conference on Programming Language Design
and Implementation, June 1993.

(the semantics are slightly different at this point, but the
paper still (mostly) accurately describes the interface).
@end deffn

guardian-destroyed?
@c snarfed from guardians.c:362
@deffn {Scheme Procedure} guardian-destroyed? guardian
Return @code{#t} if @var{guardian} has been destroyed, otherwise @code{#f}.
@end deffn

guardian-greedy?
@c snarfed from guardians.c:380
@deffn {Scheme Procedure} guardian-greedy? guardian
Return @code{#t} if @var{guardian} is a greedy guardian, otherwise @code{#f}.
@end deffn

destroy-guardian!
@c snarfed from guardians.c:391
@deffn {Scheme Procedure} destroy-guardian! guardian
Destroys @var{guardian}, by making it impossible to put any more
objects in it or get any objects from it.  It also unguards any
objects guarded by @var{guardian}.
@end deffn

hashq
@c snarfed from hash.c:201
@deffn {Scheme Procedure} hashq key size
Determine a hash value for @var{key} that is suitable for
lookups in a hashtable of size @var{size}, where @code{eq?} is
used as the equality predicate.  The function returns an
integer in the range 0 to @var{size} - 1.  Note that
@code{hashq} may use internal addresses.  Thus two calls to
hashq where the keys are @code{eq?} are not guaranteed to
deliver the same value if the key object gets garbage collected
in between.  This can happen, for example with symbols:
@code{(hashq 'foo n) (gc) (hashq 'foo n)} may produce two
different values, since @code{foo} will be garbage collectedo @var{size} - 1.  ing?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{default_value} is returned.
@end deffn

%initialize-object
@c snarfed from goops.c:400
@deffn {Scheme Procedure} %initialize-object obj initargs
Initialize the object @var{obj} with the given arguments
@var{initargs}.
@end deffn

%prep-layout!
@c snarfed from goops.c:499
@deffn {Scheme Procedure} %prep-layout! class

@end deffn

%inherit-magic!
@c snarfed from goops.c:605
@deffn {Scheme Procedure} %inherit-magic! class dsupers

@end deffn

instance?
@c snarfed from goops.c:846
@deffn {Scheme Procedure} instance? obj
Return @code{#t} if @var{obj} is an instance.
@end deffn

class-name
@c snarfed from goops.c:861
@deffn {Scheme Procedure} class-name obj
Return the class name of @var{obj}.
@end deffn

class-direct-supers
@c snarfed from goops.c:871
@deffn {Scheme Procedure} class-direct-supers obj
Return the direct superclasses of the class @var{obj}.
@end deffn

class-direct-slots
@c snarfed from goops.c:881
@deffn {Scheme Procedure} class-direct-slots obj
Return the direct slots of the class @var{obj}.
@end deffn

class-direct-subclasses
@c snarfed from goops.c:891
@deffn {Scheme Procedure} class-direct-subclasses obj
Return the direct subclasses of the class @var{obj}.
@end deffn

class-direct-methods
@c snarfed from goops.c:901
@deffn {Scheme Procedure} class-direct-methods obj
Return the direct methods of the class @var{obj}
@end deffn

class-precedence-list
@c snarfed from goops.c:911
@deffn {Scheme Procedure} class-precedence-list obj
Return the class precedence list of the class @var{obj}.
@end deffn

class-slots
@c snarfed from goops.c:921
@deffn {Scheme Procedure} class-slots obj
Return the slot list of the class @var{obj}.
@end deffn

class-environment
@c snarfed from goops.c:931
@deffn {Scheme Procedure} class-environment obj
Return the environment of the class @var{obj}.
@end deffn

generic-function-name
@c snarfed from goops.c:942
@deffn {Scheme Procedure} generic-function-name obj
Return the name of the generic function @var{obj}.
@end deffn

generic-function-methods
@c snarfed from goops.c:952
@deffn {Scheme Procedure} generic-function-methods obj
Return the methods of the generic function @var{obj}.
@end deffn

method-generic-function
@c snarfed from goops.c:963
@deffn {Scheme Procedure} method-generic-function obj
Return the generic function for the method @var{obj}.
@end deffn

method-specializers
@c snarfed from goops.c:973
@deffn {Scheme Procedure} method-specializers obj
Return specializers of the method @var{obj}.
@end deffn

method-procedure
@c snarfed from goops.c:983
@deffn {Scheme Procedure} method-procedure obj
Return the procedure of the method @var{obj}.
@end deffn

accessor-method-slot-definition
@c snarfed from goops.c:993
@deffn {Scheme Procedure} accessor-method-slot-definition obj
Return the slot definition of the accessor @var{obj}.
@end deffn

%tag-body
@c snarfed from goops.c:1003
@deffn {Scheme Procedure} %tag-body body
Internal GOOPS magic---don't use this function!
@end deffn

make-unbound
@c snarfed from goops.c:1018
@deffn {Scheme Procedure} make-unbound
Return the unbound value.
@end deffn

unbound?
@c snarfed from goops.c:1027
@deffn {Scheme Procedure} unbound? obj
Return @code{#t} if @var{obj} is unbound.
@end deffn

assert-bound
@c snarfed from goops.c:1037
@deffn {Scheme Procedure} assert-bound value obj
Return @var{value} if it is bound, and invoke the
@var{slot-unbound} method of @var{obj} if it is not.
@end deffn

@@assert-bound-ref
@c snarfed from goops.c:1049
@deffn {Scheme Procedure} @@assert-bound-ref obj index
Like @code{assert-bound}, but use @var{index} for accessing
the value from @var{obj}.
@end deffn

%fast-slot-ref
@c snarfed from goops.c:1061
@deffn {Scheme Procedure} %fast-slot-ref obj index
Return the slot value with index @var{index} from @var{obj}.
@end deffn

%fast-slot-set!
@c snarfed from goops.c:1078
@deffn {Scheme Procedure} %fast-slot-set! obj index value
Set the slot with index @var{index} in @var{obj} to
@var{value}.
@end deffn

slot-ref-using-class
@c snarfed from goops.c:1206
@deffn {Scheme Procedure} slot-ref-using-class class obj slot_name

@end deffn

slot-set-using-class!
@c snarfed from goops.c:1225
@deffn {Scheme Procedure} slot-set-using-class! class obj slot_name value

@end deffn

slot-bound-using-class?
@c snarfed from goops.c:1239
@deffn {Scheme Procedure} slot-bound-using-class? class obj slot_name

@end deffn

slot-exists-using-class?
@c snarfed from goops.c:1254
@deffn {Scheme Procedure} slot-exists-using-class? class obj slot_name

@end deffn

slot-ref
@c snarfed from goops.c:1270
@deffn {Scheme Procedure} slot-ref obj slot_name
Return the value from @var{obj}'s slot with the name
@var{slot_name}.
@end deffn

slot-set!
@c snarfed from goops.c:1287
@deffn {Scheme Procedure} slot-set! obj slot_name value
Set the slot named @var{slot_name} of @var{obj} to @var{value}.
@end deffn

slot-bound?
@c snarfed from goops.c:1304
@deffn {Scheme Procedure} slot-bound? obj slot_name
Return @code{#t} if the slot named @var{slot_name} of @var{obj}
is bound.
@end deffn

slot-exists?
@c snarfed from goops.c:1322
@deffn {Scheme Procedure} slot-exists? obj slot_name
Return @code{#t} if @var{obj} has a slot named @var{slot_name}.
@end deffn

%allocate-instance
@c snarfed from goops.c:1366
@deffn {Scheme Procedure} %allocate-instance class initargs
Create a new instance of class @var{class} and initialize it
from the arguments @var{initargs}.
@end deffn

%set-object-setter!
@c snarfed from goops.c:1439
@deffn {Scheme Procedure} %set-object-setter! obj setter

@end deffn

%modify-instance
@c snarfed from goops.c:1464
@deffn {Scheme Procedure} %modify-instance old new

@end deffn

%modify-class
@c snarfed from goops.c:1490
@deffn {Scheme Procedure} %modify-class old new

@end deffn

%invalidate-class
@c snarfed from goops.c:1514
@deffn {Scheme Procedure} %invalidate-class class

@end deffn

%invalidate-method-cache!
@c snarfed from goops.c:1637
@deffn {Scheme Procedure} %invalidate-method-cache! gf

@end deffn

generic-capability?
@c snarfed from goops.c:1663
@deffn {Scheme Procedure} generic-capability? proc

@end deffn

enable-primitive-generic!
@c snarfed from goops.c:1676
@deffn {Scheme Procedure} enable-primitive-generic! . subrs

@end deffn

primitive-generic-generic
@c snarfed from goops.c:1696
@deffn {Scheme Procedure} primitive-generic-generic subr

@end deffn

make
@c snarfed from goops.c:2056
@deffn {Scheme Procedure} make . args
Make a new object.  @var{args} must contain the class and
all necessary initialization information.
@end deffn

find-method
@c snarfed from goops.c:2149
@deffn {Scheme Procedure} find-method . l

@end deffn

%method-more-specific?
@c snarfed from goops.c:2169
@deffn {Scheme Procedure} %method-more-specific? m1 m2 targs

@end deffn

%goops-loaded
@c snarfed from goops.c:2696
@deffn {Scheme Procedure} %goops-loaded
Announce that GOOPS is loaded and perform initialization
on the C level which depends on the loaded GOOPS modules.
@end deffn

make-guardian
@c snarfed from guardians.c:334
@deffn {Scheme Procedure} make-guardian [greedy_p]
Create a new guardian.
A guardian protects a set of objects from garbage collection,
allowing a program to apply cleanup or other actions.

@code{make-guardian} returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the
argument to the guardian's set of protected objects.
Calling the guardian procedure without an argument returns
one of the protected objects which are ready for garbage
collection, or @code{#f} if no such object is available.
Objects which are returned in this way are removed from
the guardian.

@code{make-guardian} takes one optional argument that says whether the
new guardian should be greedy or sharing.  If there is any chance
that any object protected by the guardian may be resurrected,
then you should make the guardian greedy (this is the default).

See R. Kent Dybvig, Carl Bruggeman, and David Eby (1993)
"Guardians in a Generation-Based Garbage Collector".
ACM SIGPLAN Conference on Programming Language Design
and Implementation, June 1993.

(the semantics are slightly different at this point, but the
paper still (mostly) accurately describes the interface).
@end deffn

guardian-destroyed?
@c snarfed from guardians.c:362
@deffn {Scheme Procedure} guardian-destroyed? guardian
Return @code{#t} if @var{guardian} has been destroyed, otherwise @code{#f}.
@end deffn

guardian-greedy?
@c snarfed from guardians.c:380
@deffn {Scheme Procedure} guardian-greedy? guardian
Return @code{#t} if @var{guardian} is a greedy guardian, otherwise @code{#f}.
@end deffn

destroy-guardian!
@c snarfed from guardians.c:391
@deffn {Scheme Procedure} destroy-guardian! guardian
Destroys @var{guardian}, by making it impossible to put any more
objects in it or get any objects from it.  It also unguards any
objects guarded by @var{guardian}.
@end deffn

hashq
@c snarfed from hash.c:201
@deffn {Scheme Procedure} hashq key size
Determine a hash value for @var{key} that is suitable for
lookups in a hashtable of size @var{size}, where @code{eq?} is
used as the equality predicate.  The function returns an
integer in the range 0 to @var{size} - 1.  Note that
@code{hashq} may use internal addresses.  Thus two calls to
hashq where the keys are @code{eq?} are not guaranteed to
deliver the same value if the key object gets garbage collected
in between.  This can happen, for example with symbols:
@code{(hashq 'foo n) (gc) (hashq 'foo n)} may produce two
different values, since @code{foo} will be garbage collectedo @var{size} - 1.  ing?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{default_value} is returned.
@end deffn

%initialize-object
@c snarfed from goops.c:400
@deffn {Scheme Procedure} %initialize-object obj initargs
Initialize the object @var{obj} with the given arguments
@var{initargs}.
@end deffn

%prep-layout!
@c snarfed from goops.c:499
@deffn {Scheme Procedure} %prep-layout! class

@end deffn

%inherit-magic!
@c snarfed from goops.c:605
@deffn {Scheme Procedure} %inherit-magic! class dsupers

@end deffn

instance?
@c snarfed from goops.c:846
@deffn {Scheme Procedure} instance? obj
Return @code{#t} if @var{obj} is an instance.
@end deffn

class-name
@c snarfed from goops.c:861
@deffn {Scheme Procedure} class-name obj
Return the class name of @var{obj}.
@end deffn

class-direct-supers
@c snarfed from goops.c:871
@deffn {Scheme Procedure} class-direct-supers obj
Return the direct superclasses of the class @var{obj}.
@end deffn

class-direct-slots
@c snarfed from goops.c:881
@deffn {Scheme Procedure} class-direct-slots obj
Return the direct slots of the class @var{obj}.
@end deffn

class-direct-subclasses
@c snarfed from goops.c:891
@deffn {Scheme Procedure} class-direct-subclasses obj
Return the direct subclasses of the class @var{obj}.
@end deffn

class-direct-methods
@c snarfed from goops.c:901
@deffn {Scheme Procedure} class-direct-methods obj
Return the direct methods of the class @var{obj}
@end deffn

class-precedence-list
@c snarfed from goops.c:911
@deffn {Scheme Procedure} class-precedence-list obj
Return the class precedence list of the class @var{obj}.
@end deffn

class-slots
@c snarfed from goops.c:921
@deffn {Scheme Procedure} class-slots obj
Return the slot list of the class @var{obj}.
@end deffn

class-environment
@c snarfed from goops.c:931
@deffn {Scheme Procedure} class-environment obj
Return the environment of the class @var{obj}.
@end deffn

generic-function-name
@c snarfed from goops.c:942
@deffn {Scheme Procedure} generic-function-name obj
Return the name of the generic function @var{obj}.
@end deffn

generic-function-methods
@c snarfed from goops.c:952
@deffn {Scheme Procedure} generic-function-methods obj
Return the methods of the generic function @var{obj}.
@end deffn

method-generic-function
@c snarfed from goops.c:963
@deffn {Scheme Procedure} method-generic-function obj
Return the generic function for the method @var{obj}.
@end deffn

method-specializers
@c snarfed from goops.c:973
@deffn {Scheme Procedure} method-specializers obj
Return specializers of the method @var{obj}.
@end deffn

method-procedure
@c snarfed from goops.c:983
@deffn {Scheme Procedure} method-procedure obj
Return the procedure of the method @var{obj}.
@end deffn

accessor-method-slot-definition
@c snarfed from goops.c:993
@deffn {Scheme Procedure} accessor-method-slot-definition obj
Return the slot definition of the accessor @var{obj}.
@end deffn

%tag-body
@c snarfed from goops.c:1003
@deffn {Scheme Procedure} %tag-body body
Internal GOOPS magic---don't use this function!
@end deffn

make-unbound
@c snarfed from goops.c:1018
@deffn {Scheme Procedure} make-unbound
Return the unbound value.
@end deffn

unbound?
@c snarfed from goops.c:1027
@deffn {Scheme Procedure} unbound? obj
Return @code{#t} if @var{obj} is unbound.
@end deffn

assert-bound
@c snarfed from goops.c:1037
@deffn {Scheme Procedure} assert-bound value obj
Return @var{value} if it is bound, and invoke the
@var{slot-unbound} method of @var{obj} if it is not.
@end deffn

@@assert-bound-ref
@c snarfed from goops.c:1049
@deffn {Scheme Procedure} @@assert-bound-ref obj index
Like @code{assert-bound}, but use @var{index} for accessing
the value from @var{obj}.
@end deffn

%fast-slot-ref
@c snarfed from goops.c:1061
@deffn {Scheme Procedure} %fast-slot-ref obj index
Return the slot value with index @var{index} from @var{obj}.
@end deffn

%fast-slot-set!
@c snarfed from goops.c:1078
@deffn {Scheme Procedure} %fast-slot-set! obj index value
Set the slot with index @var{index} in @var{obj} to
@var{value}.
@end deffn

slot-ref-using-class
@c snarfed from goops.c:1206
@deffn {Scheme Procedure} slot-ref-using-class class obj slot_name

@end deffn

slot-set-using-class!
@c snarfed from goops.c:1225
@deffn {Scheme Procedure} slot-set-using-class! class obj slot_name value

@end deffn

slot-bound-using-class?
@c snarfed from goops.c:1239
@deffn {Scheme Procedure} slot-bound-using-class? class obj slot_name

@end deffn

slot-exists-using-class?
@c snarfed from goops.c:1254
@deffn {Scheme Procedure} slot-exists-using-class? class obj slot_name

@end deffn

slot-ref
@c snarfed from goops.c:1270
@deffn {Scheme Procedure} slot-ref obj slot_name
Return the value from @var{obj}'s slot with the name
@var{slot_name}.
@end deffn

slot-set!
@c snarfed from goops.c:1287
@deffn {Scheme Procedure} slot-set! obj slot_name value
Set the slot named @var{slot_name} of @var{obj} to @var{value}.
@end deffn

slot-bound?
@c snarfed from goops.c:1304
@deffn {Scheme Procedure} slot-bound? obj slot_name
Return @code{#t} if the slot named @var{slot_name} of @var{obj}
is bound.
@end deffn

slot-exists?
@c snarfed from goops.c:1322
@deffn {Scheme Procedure} slot-exists? obj slot_name
Return @code{#t} if @var{obj} has a slot named @var{slot_name}.
@end deffn

%allocate-instance
@c snarfed from goops.c:1366
@deffn {Scheme Procedure} %allocate-instance class initargs
Create a new instance of class @var{class} and initialize it
from the arguments @var{initargs}.
@end deffn

%set-object-setter!
@c snarfed from goops.c:1439
@deffn {Scheme Procedure} %set-object-setter! obj setter

@end deffn

%modify-instance
@c snarfed from goops.c:1464
@deffn {Scheme Procedure} %modify-instance old new

@end deffn

%modify-class
@c snarfed from goops.c:1490
@deffn {Scheme Procedure} %modify-class old new

@end deffn

%invalidate-class
@c snarfed from goops.c:1514
@deffn {Scheme Procedure} %invalidate-class class

@end deffn

%invalidate-method-cache!
@c snarfed from goops.c:1637
@deffn {Scheme Procedure} %invalidate-method-cache! gf

@end deffn

generic-capability?
@c snarfed from goops.c:1663
@deffn {Scheme Procedure} generic-capability? proc

@end deffn

enable-primitive-generic!
@c snarfed from goops.c:1676
@deffn {Scheme Procedure} enable-primitive-generic! . subrs

@end deffn

primitive-generic-generic
@c snarfed from goops.c:1696
@deffn {Scheme Procedure} primitive-generic-generic subr

@end deffn

make
@c snarfed from goops.c:2056
@deffn {Scheme Procedure} make . args
Make a new object.  @var{args} must contain the class and
all necessary initialization information.
@end deffn

find-method
@c snarfed from goops.c:2149
@deffn {Scheme Procedure} find-method . l

@end deffn

%method-more-specific?
@c snarfed from goops.c:2169
@deffn {Scheme Procedure} %method-more-specific? m1 m2 targs

@end deffn

%goops-loaded
@c snarfed from goops.c:2696
@deffn {Scheme Procedure} %goops-loaded
Announce that GOOPS is loaded and perform initialization
on the C level which depends on the loaded GOOPS modules.
@end deffn

make-guardian
@c snarfed from guardians.c:334
@deffn {Scheme Procedure} make-guardian [greedy_p]
Create a new guardian.
A guardian protects a set of objects from garbage collection,
allowing a program to apply cleanup or other actions.

@code{make-guardian} returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the
argument to the guardian's set of protected objects.
Calling the guardian procedure without an argument returns
one of the protected objects which are ready for garbage
collection, or @code{#f} if no such object is available.
Objects which are returned in this way are removed from
the guardian.

@code{make-guardian} takes one optional argument that says whether the
new guardian should be greedy or sharing.  If there is any chance
that any object protected by the guardian may be resurrected,
then you should make the guardian greedy (this is the default).

See R. Kent Dybvig, Carl Bruggeman, and David Eby (1993)
"Guardians in a Generation-Based Garbage Collector".
ACM SIGPLAN Conference on Programming Language Design
and Implementation, June 1993.

(the semantics are slightly different at this point, but the
paper still (mostly) accurately describes the interface).
@end deffn

guardian-destroyed?
@c snarfed from guardians.c:362
@deffn {Scheme Procedure} guardian-destroyed? guardian
Return @code{#t} if @var{guardian} has been destroyed, otherwise @code{#f}.
@end deffn

guardian-greedy?
@c snarfed from guardians.c:380
@deffn {Scheme Procedure} guardian-greedy? guardian
Return @code{#t} if @var{guardian} is a greedy guardian, otherwise @code{#f}.
@end deffn

destroy-guardian!
@c snarfed from guardians.c:391
@deffn {Scheme Procedure} destroy-guardian! guardian
Destroys @var{guardian}, by making it impossible to put any more
objects in it or get any objects from it.  It also unguards any
objects guarded by @var{guardian}.
@end deffn

hashq
@c snarfed from hash.c:201
@deffn {Scheme Procedure} hashq key size
Determine a hash value for @var{key} that is suitable for
lookups in a hashtable of size @var{size}, where @code{eq?} is
used as the equality predicate.  The function returns an
integer in the range 0 to @var{size} - 1.  Note that
@code{hashq} may use internal addresses.  Thus two calls to
hashq where the keys are @code{eq?} are not guaranteed to
deliver the same value if the key object gets garbage collected
in between.  This can happen, for example with symbols:
@code{(hashq 'foo n) (gc) (hashq 'foo n)} may produce two
different values, since @code{foo} will be garbage collectedo @var{size} - 1.  ing?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{default_value} is returned.
@end deffn

%initialize-object
@c snarfed from goops.c:400
@deffn {Scheme Procedure} %initialize-object obj initargs
Initialize the object @var{obj} with the given arguments
@var{initargs}.
@end deffn

%prep-layout!
@c snarfed from goops.c:499
@deffn {Scheme Procedure} %prep-layout! class

@end deffn

%inherit-magic!
@c snarfed from goops.c:605
@deffn {Scheme Procedure} %inherit-magic! class dsupers

@end deffn

instance?
@c snarfed from goops.c:846
@deffn {Scheme Procedure} instance? obj
Return @code{#t} if @var{obj} is an instance.
@end deffn

class-name
@c snarfed from goops.c:861
@deffn {Scheme Procedure} class-name obj
Return the class name of @var{obj}.
@end deffn

class-direct-supers
@c snarfed from goops.c:871
@deffn {Scheme Procedure} class-direct-supers obj
Return the direct superclasses of the class @var{obj}.
@end deffn

class-direct-slots
@c snarfed from goops.c:881
@deffn {Scheme Procedure} class-direct-slots obj
Return the direct slots of the class @var{obj}.
@end deffn

class-direct-subclasses
@c snarfed from goops.c:891
@deffn {Scheme Procedure} class-direct-subclasses obj
Return the direct subclasses of the class @var{obj}.
@end deffn

class-direct-methods
@c snarfed from goops.c:901
@deffn {Scheme Procedure} class-direct-methods obj
Return the direct methods of the class @var{obj}
@end deffn

class-precedence-list
@c snarfed from goops.c:911
@deffn {Scheme Procedure} class-precedence-list obj
Return the class precedence list of the class @var{obj}.
@end deffn

class-slots
@c snarfed from goops.c:921
@deffn {Scheme Procedure} class-slots obj
Return the slot list of the class @var{obj}.
@end deffn

class-environment
@c snarfed from goops.c:931
@deffn {Scheme Procedure} class-environment obj
Return the environment of the class @var{obj}.
@end deffn

generic-function-name
@c snarfed from goops.c:942
@deffn {Scheme Procedure} generic-function-name obj
Return the name of the generic function @var{obj}.
@end deffn

generic-function-methods
@c snarfed from goops.c:952
@deffn {Scheme Procedure} generic-function-methods obj
Return the methods of the generic function @var{obj}.
@end deffn

method-generic-function
@c snarfed from goops.c:963
@deffn {Scheme Procedure} method-generic-function obj
Return the generic function for the method @var{obj}.
@end deffn

method-specializers
@c snarfed from goops.c:973
@deffn {Scheme Procedure} method-specializers obj
Return specializers of the method @var{obj}.
@end deffn

method-procedure
@c snarfed from goops.c:983
@deffn {Scheme Procedure} method-procedure obj
Return the procedure of the method @var{obj}.
@end deffn

accessor-method-slot-definition
@c snarfed from goops.c:993
@deffn {Scheme Procedure} accessor-method-slot-definition obj
Return the slot definition of the accessor @var{obj}.
@end deffn

%tag-body
@c snarfed from goops.c:1003
@deffn {Scheme Procedure} %tag-body body
Internal GOOPS magic---don't use this function!
@end deffn

make-unbound
@c snarfed from goops.c:1018
@deffn {Scheme Procedure} make-unbound
Return the unbound value.
@end deffn

unbound?
@c snarfed from goops.c:1027
@deffn {Scheme Procedure} unbound? obj
Return @code{#t} if @var{obj} is unbound.
@end deffn

assert-bound
@c snarfed from goops.c:1037
@deffn {Scheme Procedure} assert-bound value obj
Return @var{value} if it is bound, and invoke the
@var{slot-unbound} method of @var{obj} if it is not.
@end deffn

@@assert-bound-ref
@c snarfed from goops.c:1049
@deffn {Scheme Procedure} @@assert-bound-ref obj index
Like @code{assert-bound}, but use @var{index} for accessing
the value from @var{obj}.
@end deffn

%fast-slot-ref
@c snarfed from goops.c:1061
@deffn {Scheme Procedure} %fast-slot-ref obj index
Return the slot value with index @var{index} from @var{obj}.
@end deffn

%fast-slot-set!
@c snarfed from goops.c:1078
@deffn {Scheme Procedure} %fast-slot-set! obj index value
Set the slot with index @var{index} in @var{obj} to
@var{value}.
@end deffn

slot-ref-using-class
@c snarfed from goops.c:1206
@deffn {Scheme Procedure} slot-ref-using-class class obj slot_name

@end deffn

slot-set-using-class!
@c snarfed from goops.c:1225
@deffn {Scheme Procedure} slot-set-using-class! class obj slot_name value

@end deffn

slot-bound-using-class?
@c snarfed from goops.c:1239
@deffn {Scheme Procedure} slot-bound-using-class? class obj slot_name

@end deffn

slot-exists-using-class?
@c snarfed from goops.c:1254
@deffn {Scheme Procedure} slot-exists-using-class? class obj slot_name

@end deffn

slot-ref
@c snarfed from goops.c:1270
@deffn {Scheme Procedure} slot-ref obj slot_name
Return the value from @var{obj}'s slot with the name
@var{slot_name}.
@end deffn

slot-set!
@c snarfed from goops.c:1287
@deffn {Scheme Procedure} slot-set! obj slot_name value
Set the slot named @var{slot_name} of @var{obj} to @var{value}.
@end deffn

slot-bound?
@c snarfed from goops.c:1304
@deffn {Scheme Procedure} slot-bound? obj slot_name
Return @code{#t} if the slot named @var{slot_name} of @var{obj}
is bound.
@end deffn

slot-exists?
@c snarfed from goops.c:1322
@deffn {Scheme Procedure} slot-exists? obj slot_name
Return @code{#t} if @var{obj} has a slot named @var{slot_name}.
@end deffn

%allocate-instance
@c snarfed from goops.c:1366
@deffn {Scheme Procedure} %allocate-instance class initargs
Create a new instance of class @var{class} and initialize it
from the arguments @var{initargs}.
@end deffn

%set-object-setter!
@c snarfed from goops.c:1439
@deffn {Scheme Procedure} %set-object-setter! obj setter

@end deffn

%modify-instance
@c snarfed from goops.c:1464
@deffn {Scheme Procedure} %modify-instance old new

@end deffn

%modify-class
@c snarfed from goops.c:1490
@deffn {Scheme Procedure} %modify-class old new

@end deffn

%invalidate-class
@c snarfed from goops.c:1514
@deffn {Scheme Procedure} %invalidate-class class

@end deffn

%invalidate-method-cache!
@c snarfed from goops.c:1637
@deffn {Scheme Procedure} %invalidate-method-cache! gf

@end deffn

generic-capability?
@c snarfed from goops.c:1663
@deffn {Scheme Procedure} generic-capability? proc

@end deffn

enable-primitive-generic!
@c snarfed from goops.c:1676
@deffn {Scheme Procedure} enable-primitive-generic! . subrs

@end deffn

primitive-generic-generic
@c snarfed from goops.c:1696
@deffn {Scheme Procedure} primitive-generic-generic subr

@end deffn

make
@c snarfed from goops.c:2056
@deffn {Scheme Procedure} make . args
Make a new object.  @var{args} must contain the class and
all necessary initialization information.
@end deffn

find-method
@c snarfed from goops.c:2149
@deffn {Scheme Procedure} find-method . l

@end deffn

%method-more-specific?
@c snarfed from goops.c:2169
@deffn {Scheme Procedure} %method-more-specific? m1 m2 targs

@end deffn

%goops-loaded
@c snarfed from goops.c:2696
@deffn {Scheme Procedure} %goops-loaded
Announce that GOOPS is loaded and perform initialization
on the C level which depends on the loaded GOOPS modules.
@end deffn

make-guardian
@c snarfed from guardians.c:334
@deffn {Scheme Procedure} make-guardian [greedy_p]
Create a new guardian.
A guardian protects a set of objects from garbage collection,
allowing a program to apply cleanup or other actions.

@code{make-guardian} returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the
argument to the guardian's set of protected objects.
Calling the guardian procedure without an argument returns
one of the protected objects which are ready for garbage
collection, or @code{#f} if no such object is available.
Objects which are returned in this way are removed from
the guardian.

@code{make-guardian} takes one optional argument that says whether the
new guardian should be greedy or sharing.  If there is any chance
that any object protected by the guardian may be resurrected,
then you should make the guardian greedy (this is the default).

See R. Kent Dybvig, Carl Bruggeman, and David Eby (1993)
"Guardians in a Generation-Based Garbage Collector".
ACM SIGPLAN Conference on Programming Language Design
and Implementation, June 1993.

(the semantics are slightly different at this point, but the
paper still (mostly) accurately describes the interface).
@end deffn

guardian-destroyed?
@c snarfed from guardians.c:362
@deffn {Scheme Procedure} guardian-destroyed? guardian
Return @code{#t} if @var{guardian} has been destroyed, otherwise @code{#f}.
@end deffn

guardian-greedy?
@c snarfed from guardians.c:380
@deffn {Scheme Procedure} guardian-greedy? guardian
Return @code{#t} if @var{guardian} is a greedy guardian, otherwise @code{#f}.
@end deffn

destroy-guardian!
@c snarfed from guardians.c:391
@deffn {Scheme Procedure} destroy-guardian! guardian
Destroys @var{guardian}, by making it impossible to put any more
objects in it or get any objects from it.  It also unguards any
objects guarded by @var{guardian}.
@end deffn

hashq
@c snarfed from hash.c:201
@deffn {Scheme Procedure} hashq key size
Determine a hash value for @var{key} that is suitable for
lookups in a hashtable of size @var{size}, where @code{eq?} is
used as the equality predicate.  The function returns an
integer in the range 0 to @var{size} - 1.  Note that
@code{hashq} may use internal addresses.  Thus two calls to
hashq where the keys are @code{eq?} are not guaranteed to
deliver the same value if the key object gets garbage collected
in between.  This can happen, for example with symbols:
@code{(hashq 'foo n) (gc) (hashq 'foo n)} may produce two
different values, since @code{foo} will be garbage collectedo @var{size} - 1.  ing?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{default_value} is returned.
@end deffn

%initialize-object
@c snarfed from goops.c:400
@deffn {Scheme Procedure} %initialize-object obj initargs
Initialize the object @var{obj} with the given arguments
@var{initargs}.
@end deffn

%prep-layout!
@c snarfed from goops.c:499
@deffn {Scheme Procedure} %prep-layout! class

@end deffn

%inherit-magic!
@c snarfed from goops.c:605
@deffn {Scheme Procedure} %inherit-magic! class dsupers

@end deffn

instance?
@c snarfed from goops.c:846
@deffn {Scheme Procedure} instance? obj
Return @code{#t} if @var{obj} is an instance.
@end deffn

class-name
@c snarfed from goops.c:861
@deffn {Scheme Procedure} class-name obj
Return the class name of @var{obj}.
@end deffn

class-direct-supers
@c snarfed from goops.c:871
@deffn {Scheme Procedure} class-direct-supers obj
Return the direct superclasses of the class @var{obj}.
@end deffn

class-direct-slots
@c snarfed from goops.c:881
@deffn {Scheme Procedure} class-direct-slots obj
Return the direct slots of the class @var{obj}.
@end deffn

class-direct-subclasses
@c snarfed from goops.c:891
@deffn {Scheme Procedure} class-direct-subclasses obj
Return the direct subclasses of the class @var{obj}.
@end deffn

class-direct-methods
@c snarfed from goops.c:901
@deffn {Scheme Procedure} class-direct-methods obj
Return the direct methods of the class @var{obj}
@end deffn

class-precedence-list
@c snarfed from goops.c:911
@deffn {Scheme Procedure} class-precedence-list obj
Return the class precedence list of the class @var{obj}.
@end deffn

class-slots
@c snarfed from goops.c:921
@deffn {Scheme Procedure} class-slots obj
Return the slot list of the class @var{obj}.
@end deffn

class-environment
@c snarfed from goops.c:931
@deffn {Scheme Procedure} class-environment obj
Return the environment of the class @var{obj}.
@end deffn

generic-function-name
@c snarfed from goops.c:942
@deffn {Scheme Procedure} generic-function-name obj
Return the name of the generic function @var{obj}.
@end deffn

generic-function-methods
@c snarfed from goops.c:952
@deffn {Scheme Procedure} generic-function-methods obj
Return the methods of the generic function @var{obj}.
@end deffn

method-generic-function
@c snarfed from goops.c:963
@deffn {Scheme Procedure} method-generic-function obj
Return the generic function for the method @var{obj}.
@end deffn

method-specializers
@c snarfed from goops.c:973
@deffn {Scheme Procedure} method-specializers obj
Return specializers of the method @var{obj}.
@end deffn

method-procedure
@c snarfed from goops.c:983
@deffn {Scheme Procedure} method-procedure obj
Return the procedure of the method @var{obj}.
@end deffn

accessor-method-slot-definition
@c snarfed from goops.c:993
@deffn {Scheme Procedure} accessor-method-slot-definition obj
Return the slot definition of the accessor @var{obj}.
@end deffn

%tag-body
@c snarfed from goops.c:1003
@deffn {Scheme Procedure} %tag-body body
Internal GOOPS magic---don't use this function!
@end deffn

make-unbound
@c snarfed from goops.c:1018
@deffn {Scheme Procedure} make-unbound
Return the unbound value.
@end deffn

unbound?
@c snarfed from goops.c:1027
@deffn {Scheme Procedure} unbound? obj
Return @code{#t} if @var{obj} is unbound.
@end deffn

assert-bound
@c snarfed from goops.c:1037
@deffn {Scheme Procedure} assert-bound value obj
Return @var{value} if it is bound, and invoke the
@var{slot-unbound} method of @var{obj} if it is not.
@end deffn

@@assert-bound-ref
@c snarfed from goops.c:1049
@deffn {Scheme Procedure} @@assert-bound-ref obj index
Like @code{assert-bound}, but use @var{index} for accessing
the value from @var{obj}.
@end deffn

%fast-slot-ref
@c snarfed from goops.c:1061
@deffn {Scheme Procedure} %fast-slot-ref obj index
Return the slot value with index @var{index} from @var{obj}.
@end deffn

%fast-slot-set!
@c snarfed from goops.c:1078
@deffn {Scheme Procedure} %fast-slot-set! obj index value
Set the slot with index @var{index} in @var{obj} to
@var{value}.
@end deffn

slot-ref-using-class
@c snarfed from goops.c:1206
@deffn {Scheme Procedure} slot-ref-using-class class obj slot_name

@end deffn

slot-set-using-class!
@c snarfed from goops.c:1225
@deffn {Scheme Procedure} slot-set-using-class! class obj slot_name value

@end deffn

slot-bound-using-class?
@c snarfed from goops.c:1239
@deffn {Scheme Procedure} slot-bound-using-class? class obj slot_name

@end deffn

slot-exists-using-class?
@c snarfed from goops.c:1254
@deffn {Scheme Procedure} slot-exists-using-class? class obj slot_name

@end deffn

slot-ref
@c snarfed from goops.c:1270
@deffn {Scheme Procedure} slot-ref obj slot_name
Return the value from @var{obj}'s slot with the name
@var{slot_name}.
@end deffn

slot-set!
@c snarfed from goops.c:1287
@deffn {Scheme Procedure} slot-set! obj slot_name value
Set the slot named @var{slot_name} of @var{obj} to @var{value}.
@end deffn

slot-bound?
@c snarfed from goops.c:1304
@deffn {Scheme Procedure} slot-bound? obj slot_name
Return @code{#t} if the slot named @var{slot_name} of @var{obj}
is bound.
@end deffn

slot-exists?
@c snarfed from goops.c:1322
@deffn {Scheme Procedure} slot-exists? obj slot_name
Return @code{#t} if @var{obj} has a slot named @var{slot_name}.
@end deffn

%allocate-instance
@c snarfed from goops.c:1366
@deffn {Scheme Procedure} %allocate-instance class initargs
Create a new instance of class @var{class} and initialize it
from the arguments @var{initargs}.
@end deffn

%set-object-setter!
@c snarfed from goops.c:1439
@deffn {Scheme Procedure} %set-object-setter! obj setter

@end deffn

%modify-instance
@c snarfed from goops.c:1464
@deffn {Scheme Procedure} %modify-instance old new

@end deffn

%modify-class
@c snarfed from goops.c:1490
@deffn {Scheme Procedure} %modify-class old new

@end deffn

%invalidate-class
@c snarfed from goops.c:1514
@deffn {Scheme Procedure} %invalidate-class class

@end deffn

%invalidate-method-cache!
@c snarfed from goops.c:1637
@deffn {Scheme Procedure} %invalidate-method-cache! gf

@end deffn

generic-capability?
@c snarfed from goops.c:1663
@deffn {Scheme Procedure} generic-capability? proc

@end deffn

enable-primitive-generic!
@c snarfed from goops.c:1676
@deffn {Scheme Procedure} enable-primitive-generic! . subrs

@end deffn

primitive-generic-generic
@c snarfed from goops.c:1696
@deffn {Scheme Procedure} primitive-generic-generic subr

@end deffn

make
@c snarfed from goops.c:2056
@deffn {Scheme Procedure} make . args
Make a new object.  @var{args} must contain the class and
all necessary initialization information.
@end deffn

find-method
@c snarfed from goops.c:2149
@deffn {Scheme Procedure} find-method . l

@end deffn

%method-more-specific?
@c snarfed from goops.c:2169
@deffn {Scheme Procedure} %method-more-specific? m1 m2 targs

@end deffn

%goops-loaded
@c snarfed from goops.c:2696
@deffn {Scheme Procedure} %goops-loaded
Announce that GOOPS is loaded and perform initialization
on the C level which depends on the loaded GOOPS modules.
@end deffn

make-guardian
@c snarfed from guardians.c:334
@deffn {Scheme Procedure} make-guardian [greedy_p]
Create a new guardian.
A guardian protects a set of objects from garbage collection,
allowing a program to apply cleanup or other actions.

@code{make-guardian} returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the
argument to the guardian's set of protected objects.
Calling the guardian procedure without an argument returns
one of the protected objects which are ready for garbage
collection, or @code{#f} if no such object is available.
Objects which are returned in this way are removed from
the guardian.

@code{make-guardian} takes one optional argument that says whether the
new guardian should be greedy or sharing.  If there is any chance
that any object protected by the guardian may be resurrected,
then you should make the guardian greedy (this is the default).

See R. Kent Dybvig, Carl Bruggeman, and David Eby (1993)
"Guardians in a Generation-Based Garbage Collector".
ACM SIGPLAN Conference on Programming Language Design
and Implementation, June 1993.

(the semantics are slightly different at this point, but the
paper still (mostly) accurately describes the interface).
@end deffn

guardian-destroyed?
@c snarfed from guardians.c:362
@deffn {Scheme Procedure} guardian-destroyed? guardian
Return @code{#t} if @var{guardian} has been destroyed, otherwise @code{#f}.
@end deffn

guardian-greedy?
@c snarfed from guardians.c:380
@deffn {Scheme Procedure} guardian-greedy? guardian
Return @code{#t} if @var{guardian} is a greedy guardian, otherwise @code{#f}.
@end deffn

destroy-guardian!
@c snarfed from guardians.c:391
@deffn {Scheme Procedure} destroy-guardian! guardian
Destroys @var{guardian}, by making it impossible to put any more
objects in it or get any objects from it.  It also unguards any
objects guarded by @var{guardian}.
@end deffn

hashq
@c snarfed from hash.c:201
@deffn {Scheme Procedure} hashq key size
Determine a hash value for @var{key} that is suitable for
lookups in a hashtable of size @var{size}, where @code{eq?} is
used as the equality predicate.  The function returns an
integer in the range 0 to @var{size} - 1.  Note that
@code{hashq} may use internal addresses.  Thus two calls to
hashq where the keys are @code{eq?} are not guaranteed to
deliver the same value if the key object gets garbage collected
in between.  This can happen, for example with symbols:
@code{(hashq 'foo n) (gc) (hashq 'foo n)} may produce two
different values, since @code{foo} will be garbage collectedo @var{size} - 1.  ing?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{default_value} is returned.
@end deffn

%initialize-object
@c snarfed from goops.c:400
@deffn {Scheme Procedure} %initialize-object obj initargs
Initialize the object @var{obj} with the given arguments
@var{initargs}.
@end deffn

%prep-layout!
@c snarfed from goops.c:499
@deffn {Scheme Procedure} %prep-layout! class

@end deffn

%inherit-magic!
@c snarfed from goops.c:605
@deffn {Scheme Procedure} %inherit-magic! class dsupers

@end deffn

instance?
@c snarfed from goops.c:846
@deffn {Scheme Procedure} instance? obj
Return @code{#t} if @var{obj} is an instance.
@end deffn

class-name
@c snarfed from goops.c:861
@deffn {Scheme Procedure} class-name obj
Return the class name of @var{obj}.
@end deffn

class-direct-supers
@c snarfed from goops.c:871
@deffn {Scheme Procedure} class-direct-supers obj
Return the direct superclasses of the class @var{obj}.
@end deffn

class-direct-slots
@c snarfed from goops.c:881
@deffn {Scheme Procedure} class-direct-slots obj
Return the direct slots of the class @var{obj}.
@end deffn

class-direct-subclasses
@c snarfed from goops.c:891
@deffn {Scheme Procedure} class-direct-subclasses obj
Return the direct subclasses of the class @var{obj}.
@end deffn

class-direct-methods
@c snarfed from goops.c:901
@deffn {Scheme Procedure} class-direct-methods obj
Return the direct methods of the class @var{obj}
@end deffn

class-precedence-list
@c snarfed from goops.c:911
@deffn {Scheme Procedure} class-precedence-list obj
Return the class precedence list of the class @var{obj}.
@end deffn

class-slots
@c snarfed from goops.c:921
@deffn {Scheme Procedure} class-slots obj
Return the slot list of the class @var{obj}.
@end deffn

class-environment
@c snarfed from goops.c:931
@deffn {Scheme Procedure} class-environment obj
Return the environment of the class @var{obj}.
@end deffn

generic-function-name
@c snarfed from goops.c:942
@deffn {Scheme Procedure} generic-function-name obj
Return the name of the generic function @var{obj}.
@end deffn

generic-function-methods
@c snarfed from goops.c:952
@deffn {Scheme Procedure} generic-function-methods obj
Return the methods of the generic function @var{obj}.
@end deffn

method-generic-function
@c snarfed from goops.c:963
@deffn {Scheme Procedure} method-generic-function obj
Return the generic function for the method @var{obj}.
@end deffn

method-specializers
@c snarfed from goops.c:973
@deffn {Scheme Procedure} method-specializers obj
Return specializers of the method @var{obj}.
@end deffn

method-procedure
@c snarfed from goops.c:983
@deffn {Scheme Procedure} method-procedure obj
Return the procedure of the method @var{obj}.
@end deffn

accessor-method-slot-definition
@c snarfed from goops.c:993
@deffn {Scheme Procedure} accessor-method-slot-definition obj
Return the slot definition of the accessor @var{obj}.
@end deffn

%tag-body
@c snarfed from goops.c:1003
@deffn {Scheme Procedure} %tag-body body
Internal GOOPS magic---don't use this function!
@end deffn

make-unbound
@c snarfed from goops.c:1018
@deffn {Scheme Procedure} make-unbound
Return the unbound value.
@end deffn

unbound?
@c snarfed from goops.c:1027
@deffn {Scheme Procedure} unbound? obj
Return @code{#t} if @var{obj} is unbound.
@end deffn

assert-bound
@c snarfed from goops.c:1037
@deffn {Scheme Procedure} assert-bound value obj
Return @var{value} if it is bound, and invoke the
@var{slot-unbound} method of @var{obj} if it is not.
@end deffn

@@assert-bound-ref
@c snarfed from goops.c:1049
@deffn {Scheme Procedure} @@assert-bound-ref obj index
Like @code{assert-bound}, but use @var{index} for accessing
the value from @var{obj}.
@end deffn

%fast-slot-ref
@c snarfed from goops.c:1061
@deffn {Scheme Procedure} %fast-slot-ref obj index
Return the slot value with index @var{index} from @var{obj}.
@end deffn

%fast-slot-set!
@c snarfed from goops.c:1078
@deffn {Scheme Procedure} %fast-slot-set! obj index value
Set the slot with index @var{index} in @var{obj} to
@var{value}.
@end deffn

slot-ref-using-class
@c snarfed from goops.c:1206
@deffn {Scheme Procedure} slot-ref-using-class class obj slot_name

@end deffn

slot-set-using-class!
@c snarfed from goops.c:1225
@deffn {Scheme Procedure} slot-set-using-class! class obj slot_name value

@end deffn

slot-bound-using-class?
@c snarfed from goops.c:1239
@deffn {Scheme Procedure} slot-bound-using-class? class obj slot_name

@end deffn

slot-exists-using-class?
@c snarfed from goops.c:1254
@deffn {Scheme Procedure} slot-exists-using-class? class obj slot_name

@end deffn

slot-ref
@c snarfed from goops.c:1270
@deffn {Scheme Procedure} slot-ref obj slot_name
Return the value from @var{obj}'s slot with the name
@var{slot_name}.
@end deffn

slot-set!
@c snarfed from goops.c:1287
@deffn {Scheme Procedure} slot-set! obj slot_name value
Set the slot named @var{slot_name} of @var{obj} to @var{value}.
@end deffn

slot-bound?
@c snarfed from goops.c:1304
@deffn {Scheme Procedure} slot-bound? obj slot_name
Return @code{#t} if the slot named @var{slot_name} of @var{obj}
is bound.
@end deffn

slot-exists?
@c snarfed from goops.c:1322
@deffn {Scheme Procedure} slot-exists? obj slot_name
Return @code{#t} if @var{obj} has a slot named @var{slot_name}.
@end deffn

%allocate-instance
@c snarfed from goops.c:1366
@deffn {Scheme Procedure} %allocate-instance class initargs
Create a new instance of class @var{class} and initialize it
from the arguments @var{initargs}.
@end deffn

%set-object-setter!
@c snarfed from goops.c:1439
@deffn {Scheme Procedure} %set-object-setter! obj setter

@end deffn

%modify-instance
@c snarfed from goops.c:1464
@deffn {Scheme Procedure} %modify-instance old new

@end deffn

%modify-class
@c snarfed from goops.c:1490
@deffn {Scheme Procedure} %modify-class old new

@end deffn

%invalidate-class
@c snarfed from goops.c:1514
@deffn {Scheme Procedure} %invalidate-class class

@end deffn

%invalidate-method-cache!
@c snarfed from goops.c:1637
@deffn {Scheme Procedure} %invalidate-method-cache! gf

@end deffn

generic-capability?
@c snarfed from goops.c:1663
@deffn {Scheme Procedure} generic-capability? proc

@end deffn

enable-primitive-generic!
@c snarfed from goops.c:1676
@deffn {Scheme Procedure} enable-primitive-generic! . subrs

@end deffn

primitive-generic-generic
@c snarfed from goops.c:1696
@deffn {Scheme Procedure} primitive-generic-generic subr

@end deffn

make
@c snarfed from goops.c:2056
@deffn {Scheme Procedure} make . args
Make a new object.  @var{args} must contain the class and
all necessary initialization information.
@end deffn

find-method
@c snarfed from goops.c:2149
@deffn {Scheme Procedure} find-method . l

@end deffn

%method-more-specific?
@c snarfed from goops.c:2169
@deffn {Scheme Procedure} %method-more-specific? m1 m2 targs

@end deffn

%goops-loaded
@c snarfed from goops.c:2696
@deffn {Scheme Procedure} %goops-loaded
Announce that GOOPS is loaded and perform initialization
on the C level which depends on the loaded GOOPS modules.
@end deffn

make-guardian
@c snarfed from guardians.c:334
@deffn {Scheme Procedure} make-guardian [greedy_p]
Create a new guardian.
A guardian protects a set of objects from garbage collection,
allowing a program to apply cleanup or other actions.

@code{make-guardian} returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the
argument to the guardian's set of protected objects.
Calling the guardian procedure without an argument returns
one of the protected objects which are ready for garbage
collection, or @code{#f} if no such object is available.
Objects which are returned in this way are removed from
the guardian.

@code{make-guardian} takes one optional argument that says whether the
new guardian should be greedy or sharing.  If there is any chance
that any object protected by the guardian may be resurrected,
then you should make the guardian greedy (this is the default).

See R. Kent Dybvig, Carl Bruggeman, and David Eby (1993)
"Guardians in a Generation-Based Garbage Collector".
ACM SIGPLAN Conference on Programming Language Design
and Implementation, June 1993.

(the semantics are slightly different at this point, but the
paper still (mostly) accurately describes the interface).
@end deffn

guardian-destroyed?
@c snarfed from guardians.c:362
@deffn {Scheme Procedure} guardian-destroyed? guardian
Return @code{#t} if @var{guardian} has been destroyed, otherwise @code{#f}.
@end deffn

guardian-greedy?
@c snarfed from guardians.c:380
@deffn {Scheme Procedure} guardian-greedy? guardian
Return @code{#t} if @var{guardian} is a greedy guardian, otherwise @code{#f}.
@end deffn

destroy-guardian!
@c snarfed from guardians.c:391
@deffn {Scheme Procedure} destroy-guardian! guardian
Destroys @var{guardian}, by making it impossible to put any more
objects in it or get any objects from it.  It also unguards any
objects guarded by @var{guardian}.
@end deffn

hashq
@c snarfed from hash.c:201
@deffn {Scheme Procedure} hashq key size
Determine a hash value for @var{key} that is suitable for
lookups in a hashtable of size @var{size}, where @code{eq?} is
used as the equality predicate.  The function returns an
integer in the range 0 to @var{size} - 1.  Note that
@code{hashq} may use internal addresses.  Thus two calls to
hashq where the keys are @code{eq?} are not guaranteed to
deliver the same value if the key object gets garbage collected
in between.  This can happen, for example with symbols:
@code{(hashq 'foo n) (gc) (hashq 'foo n)} may produce two
different values, since @code{foo} will be garbage collectedo @var{size} - 1.  ing?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{default_value} is returned.
@end deffn

%initialize-object
@c snarfed from goops.c:400
@deffn {Scheme Procedure} %initialize-object obj initargs
Initialize the object @var{obj} with the given arguments
@var{initargs}.
@end deffn

%prep-layout!
@c snarfed from goops.c:499
@deffn {Scheme Procedure} %prep-layout! class

@end deffn

%inherit-magic!
@c snarfed from goops.c:605
@deffn {Scheme Procedure} %inherit-magic! class dsupers

@end deffn

instance?
@c snarfed from goops.c:846
@deffn {Scheme Procedure} instance? obj
Return @code{#t} if @var{obj} is an instance.
@end deffn

class-name
@c snarfed from goops.c:861
@deffn {Scheme Procedure} class-name obj
Return the class name of @var{obj}.
@end deffn

class-direct-supers
@c snarfed from goops.c:871
@deffn {Scheme Procedure} class-direct-supers obj
Return the direct superclasses of the class @var{obj}.
@end deffn

class-direct-slots
@c snarfed from goops.c:881
@deffn {Scheme Procedure} class-direct-slots obj
Return the direct slots of the class @var{obj}.
@end deffn

class-direct-subclasses
@c snarfed from goops.c:891
@deffn {Scheme Procedure} class-direct-subclasses obj
Return the direct subclasses of the class @var{obj}.
@end deffn

class-direct-methods
@c snarfed from goops.c:901
@deffn {Scheme Procedure} class-direct-methods obj
Return the direct methods of the class @var{obj}
@end deffn

class-precedence-list
@c snarfed from goops.c:911
@deffn {Scheme Procedure} class-precedence-list obj
Return the class precedence list of the class @var{obj}.
@end deffn

class-slots
@c snarfed from goops.c:921
@deffn {Scheme Procedure} class-slots obj
Return the slot list of the class @var{obj}.
@end deffn

class-environment
@c snarfed from goops.c:931
@deffn {Scheme Procedure} class-environment obj
Return the environment of the class @var{obj}.
@end deffn

generic-function-name
@c snarfed from goops.c:942
@deffn {Scheme Procedure} generic-function-name obj
Return the name of the generic function @var{obj}.
@end deffn

generic-function-methods
@c snarfed from goops.c:952
@deffn {Scheme Procedure} generic-function-methods obj
Return the methods of the generic function @var{obj}.
@end deffn

method-generic-function
@c snarfed from goops.c:963
@deffn {Scheme Procedure} method-generic-function obj
Return the generic function for the method @var{obj}.
@end deffn

method-specializers
@c snarfed from goops.c:973
@deffn {Scheme Procedure} method-specializers obj
Return specializers of the method @var{obj}.
@end deffn

method-procedure
@c snarfed from goops.c:983
@deffn {Scheme Procedure} method-procedure obj
Return the procedure of the method @var{obj}.
@end deffn

accessor-method-slot-definition
@c snarfed from goops.c:993
@deffn {Scheme Procedure} accessor-method-slot-definition obj
Return the slot definition of the accessor @var{obj}.
@end deffn

%tag-body
@c snarfed from goops.c:1003
@deffn {Scheme Procedure} %tag-body body
Internal GOOPS magic---don't use this function!
@end deffn

make-unbound
@c snarfed from goops.c:1018
@deffn {Scheme Procedure} make-unbound
Return the unbound value.
@end deffn

unbound?
@c snarfed from goops.c:1027
@deffn {Scheme Procedure} unbound? obj
Return @code{#t} if @var{obj} is unbound.
@end deffn

assert-bound
@c snarfed from goops.c:1037
@deffn {Scheme Procedure} assert-bound value obj
Return @var{value} if it is bound, and invoke the
@var{slot-unbound} method of @var{obj} if it is not.
@end deffn

@@assert-bound-ref
@c snarfed from goops.c:1049
@deffn {Scheme Procedure} @@assert-bound-ref obj index
Like @code{assert-bound}, but use @var{index} for accessing
the value from @var{obj}.
@end deffn

%fast-slot-ref
@c snarfed from goops.c:1061
@deffn {Scheme Procedure} %fast-slot-ref obj index
Return the slot value with index @var{index} from @var{obj}.
@end deffn

%fast-slot-set!
@c snarfed from goops.c:1078
@deffn {Scheme Procedure} %fast-slot-set! obj index value
Set the slot with index @var{index} in @var{obj} to
@var{value}.
@end deffn

slot-ref-using-class
@c snarfed from goops.c:1206
@deffn {Scheme Procedure} slot-ref-using-class class obj slot_name

@end deffn

slot-set-using-class!
@c snarfed from goops.c:1225
@deffn {Scheme Procedure} slot-set-using-class! class obj slot_name value

@end deffn

slot-bound-using-class?
@c snarfed from goops.c:1239
@deffn {Scheme Procedure} slot-bound-using-class? class obj slot_name

@end deffn

slot-exists-using-class?
@c snarfed from goops.c:1254
@deffn {Scheme Procedure} slot-exists-using-class? class obj slot_name

@end deffn

slot-ref
@c snarfed from goops.c:1270
@deffn {Scheme Procedure} slot-ref obj slot_name
Return the value from @var{obj}'s slot with the name
@var{slot_name}.
@end deffn

slot-set!
@c snarfed from goops.c:1287
@deffn {Scheme Procedure} slot-set! obj slot_name value
Set the slot named @var{slot_name} of @var{obj} to @var{value}.
@end deffn

slot-bound?
@c snarfed from goops.c:1304
@deffn {Scheme Procedure} slot-bound? obj slot_name
Return @code{#t} if the slot named @var{slot_name} of @var{obj}
is bound.
@end deffn

slot-exists?
@c snarfed from goops.c:1322
@deffn {Scheme Procedure} slot-exists? obj slot_name
Return @code{#t} if @var{obj} has a slot named @var{slot_name}.
@end deffn

%allocate-instance
@c snarfed from goops.c:1366
@deffn {Scheme Procedure} %allocate-instance class initargs
Create a new instance of class @var{class} and initialize it
from the arguments @var{initargs}.
@end deffn

%set-object-setter!
@c snarfed from goops.c:1439
@deffn {Scheme Procedure} %set-object-setter! obj setter

@end deffn

%modify-instance
@c snarfed from goops.c:1464
@deffn {Scheme Procedure} %modify-instance old new

@end deffn

%modify-class
@c snarfed from goops.c:1490
@deffn {Scheme Procedure} %modify-class old new

@end deffn

%invalidate-class
@c snarfed from goops.c:1514
@deffn {Scheme Procedure} %invalidate-class class

@end deffn

%invalidate-method-cache!
@c snarfed from goops.c:1637
@deffn {Scheme Procedure} %invalidate-method-cache! gf

@end deffn

generic-capability?
@c snarfed from goops.c:1663
@deffn {Scheme Procedure} generic-capability? proc

@end deffn

enable-primitive-generic!
@c snarfed from goops.c:1676
@deffn {Scheme Procedure} enable-primitive-generic! . subrs

@end deffn

primitive-generic-generic
@c snarfed from goops.c:1696
@deffn {Scheme Procedure} primitive-generic-generic subr

@end deffn

make
@c snarfed from goops.c:2056
@deffn {Scheme Procedure} make . args
Make a new object.  @var{args} must contain the class and
all necessary initialization information.
@end deffn

find-method
@c snarfed from goops.c:2149
@deffn {Scheme Procedure} find-method . l

@end deffn

%method-more-specific?
@c snarfed from goops.c:2169
@deffn {Scheme Procedure} %method-more-specific? m1 m2 targs

@end deffn

%goops-loaded
@c snarfed from goops.c:2696
@deffn {Scheme Procedure} %goops-loaded
Announce that GOOPS is loaded and perform initialization
on the C level which depends on the loaded GOOPS modules.
@end deffn

make-guardian
@c snarfed from guardians.c:334
@deffn {Scheme Procedure} make-guardian [greedy_p]
Create a new guardian.
A guardian protects a set of objects from garbage collection,
allowing a program to apply cleanup or other actions.

@code{make-guardian} returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the
argument to the guardian's set of protected objects.
Calling the guardian procedure without an argument returns
one of the protected objects which are ready for garbage
collection, or @code{#f} if no such object is available.
Objects which are returned in this way are removed from
the guardian.

@code{make-guardian} takes one optional argument that says whether the
new guardian should be greedy or sharing.  If there is any chance
that any object protected by the guardian may be resurrected,
then you should make the guardian greedy (this is the default).

See R. Kent Dybvig, Carl Bruggeman, and David Eby (1993)
"Guardians in a Generation-Based Garbage Collector".
ACM SIGPLAN Conference on Programming Language Design
and Implementation, June 1993.

(the semantics are slightly different at this point, but the
paper still (mostly) accurately describes the interface).
@end deffn

guardian-destroyed?
@c snarfed from guardians.c:362
@deffn {Scheme Procedure} guardian-destroyed? guardian
Return @code{#t} if @var{guardian} has been destroyed, otherwise @code{#f}.
@end deffn

guardian-greedy?
@c snarfed from guardians.c:380
@deffn {Scheme Procedure} guardian-greedy? guardian
Return @code{#t} if @var{guardian} is a greedy guardian, otherwise @code{#f}.
@end deffn

destroy-guardian!
@c snarfed from guardians.c:391
@deffn {Scheme Procedure} destroy-guardian! guardian
Destroys @var{guardian}, by making it impossible to put any more
objects in it or get any objects from it.  It also unguards any
objects guarded by @var{guardian}.
@end deffn

hashq
@c snarfed from hash.c:201
@deffn {Scheme Procedure} hashq key size
Determine a hash value for @var{key} that is suitable for
lookups in a hashtable of size @var{size}, where @code{eq?} is
used as the equality predicate.  The function returns an
integer in the range 0 to @var{size} - 1.  Note that
@code{hashq} may use internal addresses.  Thus two calls to
hashq where the keys are @code{eq?} are not guaranteed to
deliver the same value if the key object gets garbage collected
in between.  This can happen, for example with symbols:
@code{(hashq 'foo n) (gc) (hashq 'foo n)} may produce two
different values, since @code{foo} will be garbage collectedo @var{size} - 1.  ing?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{default_value} is returned.
@end deffn

%initialize-object
@c snarfed from goops.c:400
@deffn {Scheme Procedure} %initialize-object obj initargs
Initialize the object @var{obj} with the given arguments
@var{initargs}.
@end deffn

%prep-layout!
@c snarfed from goops.c:499
@deffn {Scheme Procedure} %prep-layout! class

@end deffn

%inherit-magic!
@c snarfed from goops.c:605
@deffn {Scheme Procedure} %inherit-magic! class dsupers

@end deffn

instance?
@c snarfed from goops.c:846
@deffn {Scheme Procedure} instance? obj
Return @code{#t} if @var{obj} is an instance.
@end deffn

class-name
@c snarfed from goops.c:861
@deffn {Scheme Procedure} class-name obj
Return the class name of @var{obj}.
@end deffn

class-direct-supers
@c snarfed from goops.c:871
@deffn {Scheme Procedure} class-direct-supers obj
Return the direct superclasses of the class @var{obj}.
@end deffn

class-direct-slots
@c snarfed from goops.c:881
@deffn {Scheme Procedure} class-direct-slots obj
Return the direct slots of the class @var{obj}.
@end deffn

class-direct-subclasses
@c snarfed from goops.c:891
@deffn {Scheme Procedure} class-direct-subclasses obj
Return the direct subclasses of the class @var{obj}.
@end deffn

class-direct-methods
@c snarfed from goops.c:901
@deffn {Scheme Procedure} class-direct-methods obj
Return the direct methods of the class @var{obj}
@end deffn

class-precedence-list
@c snarfed from goops.c:911
@deffn {Scheme Procedure} class-precedence-list obj
Return the class precedence list of the class @var{obj}.
@end deffn

class-slots
@c snarfed from goops.c:921
@deffn {Scheme Procedure} class-slots obj
Return the slot list of the class @var{obj}.
@end deffn

class-environment
@c snarfed from goops.c:931
@deffn {Scheme Procedure} class-environment obj
Return the environment of the class @var{obj}.
@end deffn

generic-function-name
@c snarfed from goops.c:942
@deffn {Scheme Procedure} generic-function-name obj
Return the name of the generic function @var{obj}.
@end deffn

generic-function-methods
@c snarfed from goops.c:952
@deffn {Scheme Procedure} generic-function-methods obj
Return the methods of the generic function @var{obj}.
@end deffn

method-generic-function
@c snarfed from goops.c:963
@deffn {Scheme Procedure} method-generic-function obj
Return the generic function for the method @var{obj}.
@end deffn

method-specializers
@c snarfed from goops.c:973
@deffn {Scheme Procedure} method-specializers obj
Return specializers of the method @var{obj}.
@end deffn

method-procedure
@c snarfed from goops.c:983
@deffn {Scheme Procedure} method-procedure obj
Return the procedure of the method @var{obj}.
@end deffn

accessor-method-slot-definition
@c snarfed from goops.c:993
@deffn {Scheme Procedure} accessor-method-slot-definition obj
Return the slot definition of the accessor @var{obj}.
@end deffn

%tag-body
@c snarfed from goops.c:1003
@deffn {Scheme Procedure} %tag-body body
Internal GOOPS magic---don't use this function!
@end deffn

make-unbound
@c snarfed from goops.c:1018
@deffn {Scheme Procedure} make-unbound
Return the unbound value.
@end deffn

unbound?
@c snarfed from goops.c:1027
@deffn {Scheme Procedure} unbound? obj
Return @code{#t} if @var{obj} is unbound.
@end deffn

assert-bound
@c snarfed from goops.c:1037
@deffn {Scheme Procedure} assert-bound value obj
Return @var{value} if it is bound, and invoke the
@var{slot-unbound} method of @var{obj} if it is not.
@end deffn

@@assert-bound-ref
@c snarfed from goops.c:1049
@deffn {Scheme Procedure} @@assert-bound-ref obj index
Like @code{assert-bound}, but use @var{index} for accessing
the value from @var{obj}.
@end deffn

%fast-slot-ref
@c snarfed from goops.c:1061
@deffn {Scheme Procedure} %fast-slot-ref obj index
Return the slot value with index @var{index} from @var{obj}.
@end deffn

%fast-slot-set!
@c snarfed from goops.c:1078
@deffn {Scheme Procedure} %fast-slot-set! obj index value
Set the slot with index @var{index} in @var{obj} to
@var{value}.
@end deffn

slot-ref-using-class
@c snarfed from goops.c:1206
@deffn {Scheme Procedure} slot-ref-using-class class obj slot_name

@end deffn

slot-set-using-class!
@c snarfed from goops.c:1225
@deffn {Scheme Procedure} slot-set-using-class! class obj slot_name value

@end deffn

slot-bound-using-class?
@c snarfed from goops.c:1239
@deffn {Scheme Procedure} slot-bound-using-class? class obj slot_name

@end deffn

slot-exists-using-class?
@c snarfed from goops.c:1254
@deffn {Scheme Procedure} slot-exists-using-class? class obj slot_name

@end deffn

slot-ref
@c snarfed from goops.c:1270
@deffn {Scheme Procedure} slot-ref obj slot_name
Return the value from @var{obj}'s slot with the name
@var{slot_name}.
@end deffn

slot-set!
@c snarfed from goops.c:1287
@deffn {Scheme Procedure} slot-set! obj slot_name value
Set the slot named @var{slot_name} of @var{obj} to @var{value}.
@end deffn

slot-bound?
@c snarfed from goops.c:1304
@deffn {Scheme Procedure} slot-bound? obj slot_name
Return @code{#t} if the slot named @var{slot_name} of @var{obj}
is bound.
@end deffn

slot-exists?
@c snarfed from goops.c:1322
@deffn {Scheme Procedure} slot-exists? obj slot_name
Return @code{#t} if @var{obj} has a slot named @var{slot_name}.
@end deffn

%allocate-instance
@c snarfed from goops.c:1366
@deffn {Scheme Procedure} %allocate-instance class initargs
Create a new instance of class @var{class} and initialize it
from the arguments @var{initargs}.
@end deffn

%set-object-setter!
@c snarfed from goops.c:1439
@deffn {Scheme Procedure} %set-object-setter! obj setter

@end deffn

%modify-instance
@c snarfed from goops.c:1464
@deffn {Scheme Procedure} %modify-instance old new

@end deffn

%modify-class
@c snarfed from goops.c:1490
@deffn {Scheme Procedure} %modify-class old new

@end deffn

%invalidate-class
@c snarfed from goops.c:1514
@deffn {Scheme Procedure} %invalidate-class class

@end deffn

%invalidate-method-cache!
@c snarfed from goops.c:1637
@deffn {Scheme Procedure} %invalidate-method-cache! gf

@end deffn

generic-capability?
@c snarfed from goops.c:1663
@deffn {Scheme Procedure} generic-capability? proc

@end deffn

enable-primitive-generic!
@c snarfed from goops.c:1676
@deffn {Scheme Procedure} enable-primitive-generic! . subrs

@end deffn

primitive-generic-generic
@c snarfed from goops.c:1696
@deffn {Scheme Procedure} primitive-generic-generic subr

@end deffn

make
@c snarfed from goops.c:2056
@deffn {Scheme Procedure} make . args
Make a new object.  @var{args} must contain the class and
all necessary initialization information.
@end deffn

find-method
@c snarfed from goops.c:2149
@deffn {Scheme Procedure} find-method . l

@end deffn

%method-more-specific?
@c snarfed from goops.c:2169
@deffn {Scheme Procedure} %method-more-specific? m1 m2 targs

@end deffn

%goops-loaded
@c snarfed from goops.c:2696
@deffn {Scheme Procedure} %goops-loaded
Announce that GOOPS is loaded and perform initialization
on the C level which depends on the loaded GOOPS modules.
@end deffn

make-guardian
@c snarfed from guardians.c:334
@deffn {Scheme Procedure} make-guardian [greedy_p]
Create a new guardian.
A guardian protects a set of objects from garbage collection,
allowing a program to apply cleanup or other actions.

@code{make-guardian} returns a procedure representing the guardian.
Calling the guardian procedure with an argument adds the
argument to the guardian's set of protected objects.
Calling the guardian procedure without an argument returns
one of the protected objects which are ready for garbage
collection, or @code{#f} if no such object is available.
Objects which are returned in this way are removed from
the guardian.

@code{make-guardian} takes one optional argument that says whether the
new guardian should be greedy or sharing.  If there is any chance
that any object protected by the guardian may be resurrected,
then you should make the guardian greedy (this is the default).

See R. Kent Dybvig, Carl Bruggeman, and David Eby (1993)
"Guardians in a Generation-Based Garbage Collector".
ACM SIGPLAN Conference on Programming Language Design
and Implementation, June 1993.

(the semantics are slightly different at this point, but the
paper still (mostly) accurately describes the interface).
@end deffn

guardian-destroyed?
@c snarfed from guardians.c:362
@deffn {Scheme Procedure} guardian-destroyed? guardian
Return @code{#t} if @var{guardian} has been destroyed, otherwise @code{#f}.
@end deffn

guardian-greedy?
@c snarfed from guardians.c:380
@deffn {Scheme Procedure} guardian-greedy? guardian
Return @code{#t} if @var{guardian} is a greedy guardian, otherwise @code{#f}.
@end deffn

destroy-guardian!
@c snarfed from guardians.c:391
@deffn {Scheme Procedure} destroy-guardian! guardian
Destroys @var{guardian}, by making it impossible to put any more
objects in it or get any objects from it.  It also unguards any
objects guarded by @var{guardian}.
@end deffn

hashq
@c snarfed from hash.c:201
@deffn {Scheme Procedure} hashq key size
Determine a hash value for @var{key} that is suitable for
lookups in a hashtable of size @var{size}, where @code{eq?} is
used as the equality predicate.  The function returns an
integer in the range 0 to @var{size} - 1.  Note that
@code{hashq} may use internal addresses.  Thus two calls to
hashq where the keys are @code{eq?} are not guaranteed to
deliver the same value if the key object gets garbage collected
in between.  This can happen, for example with symbols:
@code{(hashq 'foo n) (gc) (hashq 'foo n)} may produce two
different values, since @code{foo} will be garbage collectedo @var{size} - 1.  ing?
@c snarfed from evalext.c:150
@deffn {Scheme Procedure} self-evaluating? obj
Return #t for objects which Guile considers self-evaluating
@end deffn

load-extension
@c snarfed from extensions.c:153
@deffn {Scheme Procedure} load-extension lib init
Load and initialize the extension designated by LIB and INIT.
When there is no pre-registered function for LIB/INIT, this is
equivalent to

@lisp
(dynamic-call INIT (dynamic-link LIB))
@end lisp

When there is a pre-registered function, that function is called
instead.

Normally, there is no pre-registered function.  This option exists
only for situations where dynamic linking is unavailable or unwanted.
In that case, you would statically link your program with the desired
library, and register its init function right after Guile has been
initialized.

LIB should be a string denoting a shared library without any file type
suffix such as ".so".  The suffix is provided automatically.  It
should also not contain any directory components.  Libraries that
implement Guile Extensions should be put into the normal locations for
shared libraries.  We recommend to use the naming convention
libguile-bla-blum for a extension related to a module `(bla blum)'.

The normal way for a extension to be used is to write a small Scheme
file that defines a module, and to load the extension into this
module.  When the module is auto-loaded, the extension is loaded as
well.  For example,

@lisp
(define-module (bla blum))

(load-extension "libguile-bla-blum" "bla_init_blum")
@end lisp
@end deffn

program-arguments
@c snarfed from feature.c:77
@deffn {Scheme Procedure} program-arguments
@deffnx {Scheme Procedure} command-line
Return the list of command line arguments passed to Guile, as a list of
strings.  The list includes the invoked program name, which is usually
@code{"guile"}, but excludes switches and parameters for command line
options like @code{-e} and @code{-l}.
@end deffn

make-fluid
@c snarfed from fluids.c:123
@deffn {Scheme Procedure} make-fluid
Return a newly created fluid.
Fluids are objects of a certain type (a smob) that can hold one SCM
value per dynamic root.  That is, modifications to this value are
only visible to code that executes within the same dynamic root as
the modifying code.  When a new dynamic root is constructed, it
inherits the values from its parent.  Because each thread executes
in its own dynamic root, you can use fluids for thread local storage.
@end deffn

fluid?
@c snarfed from fluids.c:136
@deffn {Scheme Procedure} fluid? obj
Return @code{#t} iff @var{obj} is a fluid; otherwise, return
@code{#f}.
@end deffn

fluid-ref
@c snarfed from fluids.c:147
@deffn {Scheme Procedure} fluid-ref fluid
Return the value associated with @var{fluid} in the current
dynamic root.  If @var{fluid} has not been set, then return
@code{#f}.
@end deffn

fluid-set!
@c snarfed from fluids.c:163
@deffn {Scheme Procedure} fluid-set! fluid value
Set the value associated with @var{fluid} in the current dynamic root.
@end deffn

with-fluids*
@c snarfed from fluids.c:222
@deffn {Scheme Procedure} with-fluids* fluids values thunk
Set @var{fluids} to @var{values} temporary, and call @var{thunk}.
@var{fluids} must be a list of fluids and @var{values} must be the same
number of their values to be applied.  Each substitution is done
one after another.  @var{thunk} must be a procedure with no argument.
@end deffn

setvbuf
@c snarfed from fports.c:152
@deffn {Scheme Procedure} setvbuf port mode [size]
Set the buffering mode for @var{port}.  @var{mode} can be:
@table @code
@item _IONBF
non-buffered
@item _IOLBF
line buffered
@item _IOFBF
block buffered, using a newly allocated buffer of @var{size} bytes.
If @var{size} is omitted, a default size will be used.
@end table
@end deffn

file-port?
@c snarfed from fports.c:234
@deffn {Scheme Procedure} file-port? obj
Determine whether @var{obj} is a port that is related to a file.
@end deffn

open-file
@c snarfed from fports.c:288
@deffn {Scheme Procedure} open-file filename mode
Open the file whose name is @var{filename}, and return a port
representing that file.  The attributes of the port are
determined by the @var{mode} string.  The way in which this is
interpreted is similar to C stdio.  The first character must be
one of the following:
@table @samp
@item r
Open an existing file for input.
@item w
Open a file for output, creating it if it doesn't already exist
or removing its contents if it does.
@item a
Open a file for output, creating it if it doesn't already
exist.  All writes to the port will go to the end of the file.
The "append mode" can be turned off while the port is in use
@pxref{Ports and File Descriptors, fcntl}
@end table
The following additional characters can be appended:
@table @samp
@item +
Open the port for both input and output.  E.g., @code{r+}: open
an existing file for both input and output.
@item 0
Create an "unbuffered" port.  In this case input and output
operations are passed directly to the underlying port
implementation without additional buffering.  This is likely to
slow down I/O operations.  The buffering mode can be changed
while a port is in use @pxref{Ports and File Descriptors,
setvbuf}
@item l
Add line-buffering to the port.  The port output buffer will be
automatically flushed whenever a newline character is written.
@end table
In theory we could create read/write ports which were buffered
in one direction only.  However this isn't included in the
current interfaces.  If a file cannot be opened with the access
requested, @code{open-file} throws an exception.
@end deffn

gc-stats
@c snarfed from gc.c:795
@deffn {Scheme Procedure} gc-stats
Return an association list of statistics about Guile's current
use of storage.
@end deffn

object-address
@c snarfed from gc.c:892
@deffn {Scheme Procedure} object-address obj
Return an integer that for the lifetime of @var{obj} is uniquely
returned by this function for @var{obj}
@end deffn

gc
@c snarfed from gc.c:903
@deffn {Scheme Procedure} gc
Scans all of SCM objects and reclaims for further use those that are
no longer accessible.
@end deffn

%compute-slots
@c snarfed from goops.c:292
@deffn {Scheme Procedure} %compute-slots class
Return a list consisting of the names of all slots belonging to
class @var{class}, i. e. the slots of @var{class} and of all of
its superclasses.
@end deffn

get-keyword
@c snarfed from goops.c:377
@deffn {Scheme Procedure} get-keyword key l default_value
Determine an associated value for the keyword @var{key} from
the list @var{l}.  The list @var{l} has to consist of an even
number of elements, where, starting with the first, every
second element is a keyword, followed by its associated value.
If @var{l} does not hold a value for @var{key}, the value
@var{