A Closed Lisp

Why Lispex is not just another Scheme. A closed, deterministic, macro-free Lisp that means exactly one thing.

If Lispex simply implemented R7RS, it would be R7RS, and there would be no reason for the name. The difference is not a feature Lispex adds. It is the meta-layer Lispex takes away, and the meaning it freezes in place.

Lispex borrows the vocabulary of R7RS-small and removes the machinery that lets a program rewrite the language. What remains is a Lisp that is finished rather than extensible, and that reduces to one canonical form wherever it is read.

A surface you cannot extend

Scheme's defining power is the macro. define-syntax and syntax-rules let a program grow new syntax, so the language a file speaks is whatever its macros made it. Lispex forbids that outright. The macro and reader-extension forms are immediate errors, not slow paths.

This sounds like a loss. It is the point. Because no syntax can be redefined or added, any Lispex program is understood completely from the fixed grammar alone. There is no macro to chase and no dialect to learn per file. What you read is the whole language, and a reader who knows Lispex knows every Lispex program.

One canonical form

A Lispex source does not parse differently from one reader to the next. By deterministic rules it normalizes to a single canonical Core form, with nothing in the reading left to an implementation's discretion.

So every engine that runs Lispex begins from the same canonical form for the same source. There is one agreed shape to read and to run, not a surface each implementation is free to take its own way. A form you cannot reduce to one shape is not a form you can build on.

A form, not a press

This is the real distinction. Scheme is a meta-language, a press for printing new languages. Lispex is a single finished form. You read it and you run it, but you do not retool it.

The wordmark says it plainly. Parens are punctuation, recursion is rhyme. A poem is read and recited, not rebuilt into a different poem each time it is opened. Lispex treats Lisp the same way, as a text with a fixed shape rather than a kit for making texts.

The line that keeps Lispex Lispex

Lispex keeps growing toward the useful parts of the standard. When it gains a missing essential, such as recoverable error handling, the test is not whether the standard has it but how Lispex adds it. Every form enters as a fixed part of the surface, normalized one canonical way, never as something a user can redefine.

That constraint is the proof of the philosophy. In a language with macros, a form like guard can be supplied as library-level syntax. In Lispex there are no macros, so such a form can exist only as a fixed part of the surface, written into the language rather than layered on top. The R7RS-small surface without its meta-layer, frozen. No macros, no extensions, one canonical form.