Gambit Libraries

I'm starting to develop quite a few libraries to run on top of Gambit Scheme for various project Euler problems. To better facilitate loading them and making sure that programs run with minimal hassle, I've split them up and created a very cheap framework to access the ones that are required to run any given program. This is similar to the way Emacs and Common Lisp do loading with require and such.

First you will need to check out my repository from Mercurial, which contains (at the moment) all my open source code. Then, inside your startup file (which is .gambcini on Unix) define tcv-lib-root to the location that all the library files are installed, and load the tcv-init.scm file. So for example my .gambcini file looks like this:

(define tcv-lib-root "/home/taylor/Public/Libraries/Scheme/Gambit")
(load (path-expand "tcv-gambit.scm" tcv-lib-root))

Then when you want to use something, use the tcv-require function with either the name of the library you want as a symbol or as a list of libraries as symbols. For example, any of these will work:

(tcv-require 'string)
(tcv-require 'list)
(tcv-require '(geometry string))
(tcv-require (list 'io 'vector))

If a file has already been loaded, it won't be reloaded unless the modification time on the file is newer than it was when the file was last loaded. This will allow you to make changes and simply re-require it to get the new stuff.

Libraries Currently Available

binary
Dealing with stuff as raw bytes. Currently supports hex-encoding of ports.
geometry
Theoretically will hold geometrical stuff. Right now it just has a method for finding line segment intersections.
io
Doing things like reading entire ports at once, parsing into data structures and such.
list
Functions dealing with operations on lists. All kinds of things here and growing quickly.
number
Does some stuff with numbers. Actually the only things in there right now have to do with prime numbers.
string
Methods for manipulating strings. Like the list library, it's useful and constantly expanding.
vector
Because I needed a vector map function.