Features of Scheme
May. 24th, 2023 03:36 pmBatya Wittenberg's Creatures of Dream is a haunting rap ballad about Dream, Faery, and the power of Fantasy. Scheme is a simplified dialect of the LISP programming language, often used in academic settings (at least back when I was in school). The idea for this parody did come to me just because of the sound of the refrain, but to do it justice I wanted to capture not just the facts about Scheme but my own very real sense of computer programming as a kind of magical gift.
Batya and I have now each parodied the other's best song, but I think her parody of mine isn't posted yet.
lyrics by Benjamin Newman
Batya and I have now each parodied the other's best song, but I think her parody of mine isn't posted yet.
lyrics by Benjamin Newman
ttto: "Creatures of Dream" by Batya Wittenberg
listen to this song
You're at the head of my list, kid, so get in the car
I know where you've been, 'cause I've been where you are
You looked into the machine, and where the rest found confusion
You saw something unseen — is it real or illusion?
You're not the best in your class, others are smarter or faster
But you can surpass them, you have a gift, you can master
What's truly essential about computation
Believe in your potential, not this examination
Where every missed paren feels like a terrible blunder
They see a means to an end, you feel the power and wonder
They learned the structure, but you grokked the interpretation
They found the key to a job, you found the keys to creation
You found some kind of magic, and you can make it do nearly
Anything you imagine, if you imagine it clearly
And that clarity comes when your tools are simple to know
Open up the Purple Book, kid, I got something to show you
Features of Scheme
These are the features of Scheme
The first thing about Scheme is that the language is small
There's just a few moving parts, so you can master them all
Wish you could weave a working world inside a sliver of sand?
Here's a loom that fits completely in the palm of your hand
If this machine has a heart, then it's the lambda expression
To forge your own moving parts, you just express your intention
And it creates a procedure that'll carry it out
On whatever raw material you're thinking about
Those raw materials could be procedures as well
Stir them up in the cauldron and invent a new spell
Pass them one into each to alter each one's behavior
Search this tree for a peach? Sure, but you choose the flavor!
Each procedure you make has something else up its sleeve
It remembers the context in which it was conceived
Lexical scope is what lets you buy procedures at retail
Where they share the same structure, but they differ in detail
All these features together add up to be something greater
Sure, procedures are code, but these procedures are data
You can store and compose them, just like numbers and strings
They're verbs, but they're nouns; they're people, places and things
You can fill up a world with them, a planet that sings
You can build a machine with cranks and axles and springs
Where electricity runs along invisible wires
Here's the foundation — now build whatever your heart desires
Features of Scheme
These are the features of Scheme
One thing you won't find in this language's core
Is an iterative primitive like while or for
But we have what you need to roll your very own version
Scheme comes out of the box with proper tail recursion
A call returns a value to the context that called it
But if there's no more to do there, don't worry, we solved it
Tail calls pay a value forward without sending it back
We're done here, no need to push a frame on the stack
Another thing that Scheme won't do is frequently crash
Because you don't have to tell it how to take out the trash
When your objects are dead they'll be garbage-collected
And it can tell that they're toast no matter how they're connected
And speaking of loops, you're gonna learn if you're wise
A coder's work is a loop, you write and test and revise
And one feature of Scheme that helps keep the loop tight
Is that the code that it runs is the code that you write
The interpreter takes the very code that it's given
And parses and runs it in the form that it's written
So you can see your code run almost as quick as you think it
Without waiting around for a compiler to link it
Once the ink has flowed, you'll know you wrote in style
And if you write that code, then you can load that file
It's a long, long road, it's gonna take a while
But you won't spend it waiting for your Scheme to compile
Features of Scheme
These are the features of Scheme
Scheme seems ancient now, and the world keeps turning
But if you're just starting out, it's still good for the learning
And in any post or project where the future may find you
Any language you learn, you'll learn with this one behind you
Write in Java or Python, write in Haskell or Go
There'll be some surprises, but you'll already know
More than half of what you need to be a hacker and geek
'Cause Scheme's no longer alone in what makes it unique
Look in any modern language for these features, you'll find some
'Cause folks who started as Schemers went on to design them
The keys you find here will open multiple doors
You'll take on those other tools and you'll make them all yours
You're not just learning a language here, you're learning a craft
A discipline you'll hone with each revision and draft
And it's not just a craft, it's a living tradition
Congratulations, kid, you're gonna be a magician!
Features of Scheme
These are the features of Scheme
Features of Scheme
These are the features of Scheme
no subject
Date: 2023-05-25 03:42 pm (UTC)Love it! A worthy addition to the somewhat specialized category* of Lisp filk.
(I was writing in Lisp 1.6 at Stanford a year or two before Scheme was developed at MIT.)
no subject
Date: 2023-05-25 04:27 pm (UTC)And then there's this from the Shabbat morning liturgy, which finally settles the question of which programming language G!d used to create the universe: יְצָרָם בְּדַעַת בְּבִינָה וּבְהַשְׂכֵּל y'tzaram b'da'at b'vinah uv'haskel "G!d made them (the sun, moon, and stars) with knowledge and understanding, in Haskell."