Presenting: Schemagony

If you’re familiar with esolangs, you’ve probably heard of Javagony: a challenge/restricted subset of Java designed to make programming in Java, well, agony (as it says on the can).

The gist of Javagony is the following: traditional flow control structures (for, if, while, switch etc) are strictly banned, instead you may use try {} catch() {} for conditionals, and recursion for looping. The simple rules make it a challenge rather easily doable in most languages.

Scheme, however, is a bit of a special case. Recursion is already the standard way to loop trough code in Scheme, and although SRFI-12 could be used for conditionals, it’s really just a slightly bulkier if, so Javagony isn’t much fun here.

But what if you the rules were specifically designed for making Scheme really awful to use? Well, this is my attempt at answering that question which I’m sure kept many of you awake at night.

First the obvious: no macros!

It should go without saying that macros could nullify any pain one could induce in Scheme, and so defining macros is strictly banned except for a handful of macros described later.