     [file version.texi not included]
     [file effective-version.texi not included]

The Guile Reference Manual
**************************

This manual documents Guile version VERSION.

Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2005, 2009, 2010 Free Software Foundation.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,'' and with the Back-Cover Text ``You are free to copy and modify this GNU Manual.''.  A copy of the license is included in the section entitled ``GNU Free Documentation License''.

     [file preface.texi not included]

     [file intro.texi not included]

     [file tour.texi not included]

     [file scheme-ideas.texi not included]
     [file scheme-reading.texi not included]

Programming in Scheme
*********************

Guile's core language is Scheme, and a lot can be achieved simply by using Guile to write and run Scheme programs --- as opposed to having to dive into C code. In this part of the manual, we explain how to use Guile in this mode, and describe the tools that Guile provides to help you with script writing, debugging and packaging your programs for distribution.

For detailed reference information on the variables, functions etc. that make up Guile's application programming interface (API), see API Reference.

     [file scheme-intro.texi not included]
     [file scheme-scripts.texi not included]
     [file scheme-using.texi not included]

Programming in C
****************

This part of the manual explains the general concepts that you need to understand when interfacing to Guile from C.  You will learn about how the latent typing of Scheme is embedded into the static typing of C, how the garbage collection of Guile is made available to C code, and how continuations influence the control flow in a C program.

This knowledge should make it straightforward to add new functions to Guile that can be called from Scheme.  Adding new data types is also possible and is done by defining smobs.

The Programming Overview section of this part contains general musings and guidelines about programming with Guile.  It explores different ways to design a program around Guile, or how to embed Guile into existing programs.

For a pedagogical yet detailed explanation of how the data representation of Guile is implemented, see Data Representation. You don't need to know the details given there to use Guile from C, but they are useful when you want to modify Guile itself or when you are just curious about how it is all done.

For detailed reference information on the variables, functions etc. that make up Guile's application programming interface (API), see API Reference.

     [file libguile-linking.texi not included]
     [file libguile-extensions.texi not included]
     [file libguile-concepts.texi not included]
     [file libguile-smobs.texi not included]
     [file libguile-snarf.texi not included]
     [file libguile-program.texi not included]

API Reference
*************

Guile provides an application programming interface (API) to developers in two core languages: Scheme and C.  This part of the manual contains reference documentation for all of the functionality that is available through both Scheme and C interfaces.

     [file api-overview.texi not included]
     [file api-deprecated.texi not included]
     [file api-scm.texi not included]
     [file api-init.texi not included]
     [file api-snarf.texi not included]
     [file api-data.texi not included]
     [file api-compound.texi not included]
     [file api-smobs.texi not included]
     [file api-procedures.texi not included]
     [file api-macros.texi not included]
     [file api-utility.texi not included]
     [file api-binding.texi not included]
     [file api-control.texi not included]
     [file api-io.texi not included]
     [file api-lalr.texi not included]
     [file api-evaluation.texi not included]
     [file api-memory.texi not included]
     [file api-modules.texi not included]
     [file api-foreign.texi not included]
     [file api-scheduling.texi not included]
     [file api-options.texi not included]
     [file api-languages.texi not included]
     [file api-i18n.texi not included]
     [file api-debug.texi not included]
     [file api-coverage.texi not included]

Guile Modules
*************

     [file slib.texi not included]
     [file posix.texi not included]
     [file mod-getopt-long.texi not included]
     [file srfi-modules.texi not included]
     [file r6rs.texi not included]
     [file match.texi not included]
     [file repl-modules.texi not included]
     [file misc-modules.texi not included]
     [file expect.texi not included]

     [file sxml-match.texi not included]

     [file scsh.texi not included]

Standard Library
****************

     [file standard-library.texi not included]

     [file goops.texi not included]

Guile Implementation
********************

At some point, after one has been programming in Scheme for some time, another level of Scheme comes into view: its implementation. Knowledge of how Scheme can be implemented turns out to be necessary to become an expert hacker. As Peter Norvig notes in his retrospective on PAIP (PAIP is the common abbreviation for Paradigms of Artificial Intelligence Programming, an old but still useful text on Lisp. Norvig's retrospective sums up the lessons of PAIP, and can be found at http://norvig.com/Lisp-retro.html.), ``The expert Lisp programmer eventually develops a good `efficiency model'.''

By this Norvig means that over time, the Lisp hacker eventually develops an understanding of how much her code ``costs'' in terms of space and time.

This chapter describes Guile as an implementation of Scheme: its history, how it represents and evaluates its data, and its compiler. This knowledge can help you to make that step from being one who is merely familiar with Scheme to being a real hacker.

     [file history.texi not included]
     [file data-rep.texi not included]
     [file vm.texi not included]
     [file compiler.texi not included]

     [file autoconf.texi not included]

GNU Free Documentation License
******************************

     [file fdl.texi not included]

     [file indices.texi not included]
     [file scheme-indices.texi not included]