The last sections have described how modules are used in Scheme code, which is the recommended way of creating and accessing modules. You can also work with modules from C, but it is more cumbersome.
The following procedures are available.
Call func and make module the current module during the call. The argument data is passed to func. The return value of
scm_c_call_with_current_moduleis the return value of func.
Find a the variable bound to the symbol name in the public interface of the module named module_name.
module_name should be a list of symbols, when represented as a Scheme object, or a space-separated string, in the
const char *case. Seescm_c_define_modulebelow, for more examples.Signals an error if no module was found with the given name. If name is not bound in the module, just returns
#f.
Like
scm_public_variable, but looks in the internals of the module named module_name instead of the public interface. Logically, these procedures should only be called on modules you write.
Like
scm_public_variableorscm_private_variable, but if the name is not bound in the module, signals an error. Returns a variable, always.SCM my_eval_string (SCM str) { static SCM eval_string_var = SCM_BOOL_F; if (scm_is_false (eval_string_var)) eval_string_var = scm_c_public_lookup ("ice-9 eval-string", "eval-string"); return scm_call_1 (scm_variable_ref (eval_string_var), str); }
Like
scm_public_lookuporscm_private_lookup, but additionally dereferences the variable. If the variable object is unbound, signals an error. Returns the value bound to name in module.
In addition, there are a number of other lookup-related procedures. We
suggest that you use the scm_public_ and scm_private_
family of procedures instead, if possible.
Return the variable bound to the symbol indicated by name in the current module. If there is no such binding or the symbol is not bound to a variable, signal an error.
Like
scm_c_lookupandscm_lookup, but the specified module is used instead of the current one.
Like
scm_module_lookup, but if the binding does not exist, just returns#finstead of raising an error.
To define a value, use scm_define:
Bind the symbol indicated by name to a variable in the current module and set that variable to val. When name is already bound to a variable, use that. Else create a new variable.
Like
scm_c_define, but the symbol is specified directly.
Like
scm_c_defineandscm_define, but the specified module is used instead of the current one.
Find the symbol that is bound to variable in module. When no such binding is found, return #f.
Define a new module named name and make it current while init is called, passing it data. Return the module.
The parameter name is a string with the symbols that make up the module name, separated by spaces. For example, ‘"foo bar"’ names the module ‘(foo bar)’.
When there already exists a module named name, it is used unchanged, otherwise, an empty module is created.
Find the module name name and return it. When it has not already been defined, try to auto-load it. When it can't be found that way either, create an empty module. The name is interpreted as for
scm_c_define_module.