DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(guile-tut.info.gz) What learn1 is doing

Info Catalog (guile-tut.info.gz) c_builtins (guile-tut.info.gz) More interesting programming with libguile (guile-tut.info.gz) Compiling and running learn1
 
 4.4.4 What learn1 is doing
 --------------------------
 
 If you compare learn1 to learn0, you will find that learn1 uses a new
 Guile construct: the function `gh_new_procedure()', and its siblings:
 
        /* now try to define some new builtins, coded in C, so that they are
           available in Scheme. */
        gh_new_procedure1_0("c-factorial", c_factorial);
        gh_new_procedure1_0("c-sin", c_sin);
        gh_new_procedure1_0("v-t", vector_test);
 
   It is clear that `gh_new_procedure()' adds a new builtin routine
 written in C which can be invoked from Scheme.  We can now revise our
 checklist for programming with libguile, so it includes adding
 callbacks.  
 
   1. `#include <guile/gh.h>'
 
   2. You need to invoke the initialization routine `gh_enter()'.  This
      starts up a Scheme interpreter, handling many details.
 
   3. Your main() function should be almost empty: the real main program
      goes in a separate function main_prog() which is passed to
      gh_enter().  This rather arcane convention is due to the way
      Guile's garbage collector works: the whole program has to run in
      the dynamic context of `gh_enter()'.
 
   4. You pass strings to the Scheme interpreter with the `gh_eval_str()'
      routine.
 
   5. *[new]* You can now define new builtin Scheme functions; i.e.
      define new builtin Scheme functions, with the `gh_new_procedure()'
      routine.
 
   6. You pass strings to the Scheme interpreter with the
      `gh_eval_str()' routine.
 
   7. You link your program with `-lguile'.
 
   I breezed by the issue of how to write your C routines that are
 registered to be called from Scheme.  This is non-trivial, and is
 discussed at length in the `Guile Programmer's Manual'.
 
Info Catalog (guile-tut.info.gz) c_builtins (guile-tut.info.gz) More interesting programming with libguile (guile-tut.info.gz) Compiling and running learn1
automatically generated byinfo2html