Assuming this objective, four steps are needed to achieve it.
First, you need a way of representing your application-specific objects
— such as shape
in the previous example — when they are
passed into the Scheme world. Unless your objects are so simple that
they map naturally into builtin Scheme data types like numbers and
strings, you will probably want to use Guile’s foreign object
interface to create a new Scheme data type for your objects.
Second, you need to write code for the basic operations like
for-each-shape
and square?
such that they access and
manipulate your existing data structures correctly, and then make these
operations available as primitives on the Scheme level.
Third, you need to provide some mechanism within the Dia application that a user can hook into to cause arbitrary Scheme code to be evaluated.
Finally, you need to restructure your top-level application C code a little so that it initializes the Guile interpreter correctly and declares your foreign objects and primitives to the Scheme world.
The following subsections expand on these four points in turn.