I am interested in improving my Functional Programming skills and I believe that the best way to do this is by working on a medium-sized project. In the past I have worked with Scheme and would like to continue to do so. Can someone please suggest some medium-sized Scheme project ideas? (Note: I am well-versed in C (ANSI C89/ISO C90), so making use of Scheme's foreign function interface to (for instance) interact with a library like ncurses is not only possible, but preferred.)
Course 6.001 at MIT is taught in LISP, try some of the lab assignments.
How about a continuation web server. Smalltalk already has one (Seaside) and PLT Scheme has one in it's distro, but I think it'd be a good all-round project to try as it covers networking, multithreading, I/O, user-extensibility etc etc.
There's an interesting article here that might get you started.
Good luck!!!
You might get some ideas from the recent thread "PLT projects waiting for contributors? on the PLT Scheme mailing list.
In particular take a look at Flatt's post:
http://list.cs.brown.edu/pipermail/plt-scheme/2009-January/029585.html
We could use some image-file libraries:
reading GIF files (we already have a library for writing)
reading and writing BMP files
reading and writing XPM & XBM files
All of these format are currently built into MrEd using C code, but the code is ugly and we'd like to get rid of it. Also, these image formats are fairly simple.
If you have solid Scheme under your belt, and you want to understand what happens when a compiler does code generation, follow this tutorial. There are associated resources at the author's homepage.
Beware: the paper, the tutorial, and the test cases do not quite line up. You've got to keep your wits about you and figure things out a bit for yourself. In particular, follow the tutorial until lambdas, then follow the paper for labels/code/labelcall, then back to the tutorial for heap allocation, then back to the paper for continuations and onwards to next steps. (Sorry to make it complicated, but that's the route that worked for me.)