Is lisp really a functional language? Functions are first class objects, but it’s mostly that the language is often used in the functional style. Everything is based on the immutability of cons pairs (how’s that for dorky words together?) (sidenote: this idea is a Peter/Josh collaboration)
What if you took a language like python that had functions as first class objects, but made pretty much every basic built in data structure immutable?
This kind of breaks the Haskell “Purity of Essence” thing because it allows people to rebind variables. But it may allow for a really nice language. A sort of LISPy python thingie that could almost entirely eliminate side effects except when you want them.
Peter is of the opinion that most of lisp actually derives its strength from the fact that it can directly manipulate its own syntax tree to create new language constructs. The interesting thing is that if you created some sort of decorator syntax that made a chunk of code lazily evaluated, then you might be able to make your own new python syntactical elements. Lazy evaluation + side effects is pretty nondeterministic, however, so perhaps the whole “immutable core” thing has something going for it. Note that another way of dealing with the nondeterminism is simply to have a stated convention for your interpreter/VM, but that can get pretty hairy when you start having macros manipulating macros all wanting to write to a common location – but perhaps you could simply say “don’t do that”.
It may be that what we really want is ML with a syntax that does not blow dead goats, as ML already has a “make this lazy” operator. ML also has types, which Josh feels are very important. Peter is much more ambivalent about them, and likes the loosey goosey nature of duck typing (pun not intended, merely serendipitous).









