Bo Majewski has created a nice map of programming language origins.
Éric Lévénez has built a very nice list of programming languages with references and a chart.
This interview with the developers of C, C++, and Java is full of fascinating insights. Thanks to B. Krishna for pointing it out to me.I mentioned Intercal in class. Here is a book section on this marvelous language.
You can get iters.h from here.
You might need this before the
# define bcopy(s, d, n) memcpy ((d), (s), (n))
Debugging hints: Make sure you place IterSTART at the start of every procedure that includes IterYIELD or IterFOR. Don't put IterSTART in any other procedures. Make sure you place IterDONE at the end of every procedure that uses IterYIELD. Don't put IterDONE anywhere else. You must use IterSUB to invoke procedures from any procedure that includes IterYIELD.
This example shows how Python generators can be invoked in a coroutine fashion.
Here are some web materials on ML: first second.
If my ML source file is called "foo.ml", I like to put the following function in that file:
val reload = fn _ => use "foo.ml"; (* helps during repeated runs *)