bnewman: (guitar)
[personal profile] bnewman posting in [community profile] bn_songbook
Batya 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
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

Date: 2023-05-25 03:42 pm (UTC)
mdlbear: blue fractal bear with text "since 2002" (Default)
From: [personal profile] mdlbear

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.)

  • makes me wonder whether there's any Haskell filk.
Edited Date: 2023-05-25 03:58 pm (UTC)

Profile

bn_songbook: (Default)
Ben's Songs

December 2025

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 23rd, 2026 10:46 am
Powered by Dreamwidth Studios