Many of the Scheme primitives are available in the gh_
interface; they take and return objects of type SCM, and one could
basically use them to write C code that mimics Scheme code.
I will list these routines here without much explanation, since what
they do is the same as documented in section `Standard Procedures' in R4RS. But I will point out that when a procedure takes a
variable number of arguments (such as gh_list), you should pass
the constant SCM_EOL from C to signify the end of the list.
(define name val): it binds a value to
the given name (which is a C string). Returns the new object.
(cons a b) and (list l0 l1
...) procedures. Note that gh_list() is a C macro that invokes
scm_listify().
(set-car! ...) and (set-cdr!
...) procedures.
(caadar ls) procedures etc ...
(set-car! ...).
(set-cdr! ...).
gh_append() takes args, which is a list of lists
(list1 list2 ...), and returns a list containing all the elements
of the individual lists.
A typical invocation of gh_append() to append 5 lists together
would be
gh_append(gh_list(l1, l2, l3, l4, l5, SCM_UNDEFINED));
The functions gh_append2(), gh_append2(),
gh_append3() and gh_append4() are convenience routines to
make it easier for C programs to form the list of lists that goes as an
argument to gh_append().
scm_reverse().
(memq x ls), (memv x ls) and
(member x ls), and hence use (respectively) eq?,
eqv? and equal? to do comparisons.
If x does not appear in ls, the value SCM_BOOL_F (not
the empty list) is returned.
Note that these functions are implemented as macros which call
scm_memq(), scm_memv() and scm_member()
respectively.
If no pair in alist has x as its CAR, the value
SCM_BOOL_F (not the empty list) is returned.
Note that these functions are implemented as macros which call
scm_assq(), scm_assv() and scm_assoc()
respectively.
(make-vector n fill),
(vector a b c ...) (vector-ref v i) (vector-set v i
value) (vector-length v) (list->vector ls) procedures.
The correspondence is not perfect for gh_vector: this routine
taks a list ls instead of the individual list elements, thus
making it identical to gh_list_to_vector.
There is also a difference in gh_vector_length: the value returned is a
C unsigned long instead of an SCM object.
gh_call0), one argument (gh_call1), and so on. You can
get the same effect by wrapping the arguments up into a list, and
calling gh_apply; Guile provides these functions for convenience.
catch and throw procedures,
which in Guile are provided as primitives.
eq?, eqv? and equal?
predicates.
For now I just include Tim Pierce's comments from the `gh_data.c' file; it should be organized into a documentation of the two functions here.
/* Data lookups between C and Scheme Look up a symbol with a given name, and return the object to which it is bound. gh_lookup examines the Guile top level, and gh_module_lookup checks the module namespace specified by the `vec' argument. The return value is the Scheme object to which SNAME is bound, or SCM_UNDEFINED if SNAME is not bound in the given context. [FIXME: should this be SCM_UNSPECIFIED? Can a symbol ever legitimately be bound to SCM_UNDEFINED or SCM_UNSPECIFIED? What is the difference? -twp] */
Go to the first, previous, next, last section, table of contents.