DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(guile-tut.info.gz) How to get started with libguile

Info Catalog (guile-tut.info.gz) What is libguile (guile-tut.info.gz) Guile in a Library (guile-tut.info.gz) More interesting programming with libguile
 
 4.3 How to get started with libguile
 ====================================
 
 Here is an elementary first program, `learn0', to get going with
 libguile.  The program (which uses Scheme as a master world) is in a
 single source file, `learn0.c':
 
      /* test the new libgh.a (Guile High-level library) with a trivial
         program */
 
      #include <stdio.h>
 
      #include <guile/gh.h>
 
      void main_prog(int argc, char *argv[]);
 
      main(int argc, char *argv[])
      {
        gh_enter(argc, argv, main_prog);
      }
 
      void main_prog(int argc, char *argv[])
      {
        int done;
        char input_str[200];
 
        gh_eval_str("(display \"hello Guile\")");
        gh_eval_str("(newline)");
 
        /* for fun, evaluate some simple Scheme expressions here */
        gh_eval_str("(define (square x) (* x x))");
        gh_eval_str("(define (fact n) (if (= n 1) 1 (* n (fact (- n 1)))))");
        gh_eval_str("(square 9)");
 
        /* now sit in a Scheme eval loop: I input the expressions, have
           Guile evaluate them, and then get another expression. */
        done = 0;
        fputs("learn0> ", stdout);
        while (fgets(input_str, 199, stdin) != NULL) {
          gh_eval_str(input_str);
          fputs("\nlearn0> ", stdout);
        }
 
        exit(0);
      }
 
   If you name this program `learn0.c', it can now be compiled with:
      gcc -g -c learn0.c -o learn0.o
      gcc -o learn0 learn0.o -lguile -lm
 
   The program is simple: it creates a Scheme interpreter, passes a
 couple of strings to it that define new Scheme functions `square' and
 `factorial', and then a couple of strings that invoke those functions.
 
   It then goes into a read-eval-print-loop (REPL), so you could type
 one-line Scheme expressions to it and have them evaluated.  For example:
      <shell-prompt> ./learn0
      hello Guile
      learn0> (display (sin 1.3))
      963.558185417193e-3
      learn0> (display (fact 10))
      3628800
      learn0> (quit)
      <shell-prompt>
 
   You should notice the key steps involved in this `learn0' program:
 
   1. `#include <guile/gh.h>'
 
   2. You need to invoke the initialization routine `gh_enter()'.  This
      starts up a Scheme interpreter, handling many
      implementation-specific 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. You link your program with `-lguile'.
 
Info Catalog (guile-tut.info.gz) What is libguile (guile-tut.info.gz) Guile in a Library (guile-tut.info.gz) More interesting programming with libguile
automatically generated byinfo2html