[plt-scheme] where to begin

From: Benjamin L. Russell (dekudekuplex at yahoo.com)
Date: Wed Dec 26 05:14:50 EST 2007

Here are a three other online references on Scheme
that I had forgotten to mention in my earlier post:

How to Use Scheme:  Writing Scripts and Programs with
PLT Scheme:
http://www.htus.org/

The Scheme Programming Language, Second Edition:
http://www.scheme.com/tspl2d/

The Scheme Programming Language, Third Edition:
http://www.scheme.com/tspl3/

An interesting project that you may wish to
investigate is how somebody recently wrote a spelling
corrector in PLT Scheme (see Jens Axel Søgaard's blog
entry, "Everything Scheme | Writing a Spelling
Corrector in PLT Scheme," at
http://scheme.dk/blog/2007/04/writing-spelling-corrector-in-plt.html).

This spelling corrector was actually based on a
similar spelling corrector in Gauche Scheme (see
"Gauche:SpellingCorrection," at
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aSpellingCorrection&l=en),
written by Shiro.

In turn, that spelling corrector was based on another
spelling corrector in Python (see "How to Write a
Spelling Corrector," at
http://www.norvig.com/spell-correct.html), written by
Peter Norvig.

That original spelling corrector inspired one blogger,
Scott Kirkwood, to write the entry "Scott's Blog:
Another reason I like working at Google" in which he
mentioned that example.

That blog entry was what led me to find all those
programs.

On that same page, you will also find a reference to
Norvig's Sudoku Solver (see "Solving Every Sudoku
Puzzle," at http://norvig.com/sudoku.html).  Doing a
Google search on "Sudoku +Scheme" brought up a site
entitled "Schemely Blog: Scheme Sudoku Solver" (see
http://schemely.blogspot.com/2006/02/scheme-sudoku-solver.html),
with the Scheme source code posted at "Schemely:
Sudoku Solver1" (see
http://www.bobmc.net/cgi-bin/Schemely.pl/Sudoku_Solver1).

One strategy for coming up with interesting projects
in Scheme is to find interesting projects in other
programming languages, figure out how they work,
translate them into PLT Scheme, and then post them
somewhere (preferably where you can outshine other
people have posted similar examples in other
programming languages).

While you're at it, try to write legible,
well-commented, optimized code so that other
programmers will quote you, but will have difficulty
one-upping you.  Ideally, you should aim to practice
literate programming (see "Knuth: Literate
Programming," at
http://www-cs-faculty.stanford.edu/~knuth/lp.html) so
that your code is written first for human beings, and
only second for the compiler/interpreter.

Benjamin L. Russell

--- "Benjamin L. Russell" <dekudekuplex at yahoo.com>
wrote:

> Two sites that have interesting programming
> exercises
> are the following:
> 
> Project Euler: http://projecteuler.net/
> Problems: 
> http://projecteuler.net/index.php?section=view
> 
> Rosetta Code:
> http://www.rosettacode.org/wiki/Main_Page
> Solutions by programming task: 
>
http://www.rosettacode.org/rosettacode/w/index.php?title=Category:Solutions_by_Programming_Task
> 
> Of the above two, I would first recommend Project
> Euler because of the following reasons:
> 
> * Each problem is stated succinctly.
> 
> * It offers a list of problems listed in progressive
> order of difficulty.
> 
> * Each problem has been designed according to the
> "one-minute rule," "which means that although it may
> take several hours to design a successful algorithm
> with more difficult problems, an efficient
> implementation will allow a solution to be obtained
> on
> a modestly powered computer in less than one minute"
> (courtesy of
> http://projecteuler.net/index.php?section=about).
> 
> * For registered users, the site keeps track of the
> number of users who have solved each problem.
> 
> Useful programming references for these exercises
> would probably be the following (in addition to the
> PLAI book
>
(http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/)
> already mentioned in another post):
> 
> How to Design Programs (a.k.a. "HtDP"):
> http://www.htdp.org/
> 
> Concrete Abstractions:
> http://gustavus.edu/+max/concrete-abstractions.html
> 
> You may also wish to consult the following reference
> for language-specific questions on the Scheme
> programming language (as opposed to questions on
> programming in general):
> Teach Yourself Scheme in Fixnum Days:
>
http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html
> 
> Eventually, once you are up to the challenge, you
> may
> wish to try the following classic as well:
> 
> Structure and Interpretation of Computer Programs:
> http://mitpress.mit.edu/sicp/
> 
> There is another interesting programming challenge I
> discovered recently as well, but because I myself am
> currently working on this project, please let me
> solve
> it first before I post it here.
> 
> Benjamin L. Russell
> 
> --- Joseph Anthony Pasquale Holsten
> <joseph at josephholsten.com> wrote:
> 
> > Hello everyone,
> > I'm an undergrad. I have learning to do, and would
> > like to get on  
> > with it.
> > 
> > I want to get into the more esoteric side of
> scheme,
> > and hopefully  
> > strengthen my knowledge of current programming
> > language research.  
> > I've got the Lambda the Ultimate blog in my feed
> > reader, but most of  
> > the stuff is over my head. Coq and provability
> have
> > been know to  
> > cause my eyes to glaze over for 20+ minutes.
> > 
> > I thought I might port some of my current ruby
> code
> > into scheme to  
> > fiddle with any new techniques I find. It's a
> > Genetic Programming  
> > framework, but that's irrelevant, I just want a
> > decent sized project  
> > to see the effects of. I'm open to alternate
> > projects so long as I  
> > can wrap my head around them.
> > 
> > I'm looking forward to trying contracts and
> > laziness, but am not sure  
> > what else to play with. Anything else I should
> > investigate?
> > 
> > Joseph Holsten
> > _________________________________________________
> >   For list-related administrative tasks:
> >  
> >
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
> > 
> 
> _________________________________________________
>   For list-related administrative tasks:
>  
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
> 



Posted on the users mailing list.