Prequel

Primitive recursive driven programming

Prequel: primitive recursion driven; general recursion powered.

Inspired by the dawn of computer science, Prequel is a programming language designed from first principles.

Assignment, two control structures, and two datatypes. As simple as possible, but not simpler. Prequel is easy to follow.

       n = factorial.input     
       result = 1              
       repeat n                 
        result *= n+1           
       endrep                   
       factorial.return(result) 
    

The interpreter runs on JavaScript for a mobile-first approach.

Examples

Have a look at this Prequel primer and then get started with a range of examples that help illustrate the key features of Prequel.

Blinkp

Animate a line of 8 pixels; create visual effects with the available procedures.

Try the Blinkp example here.

AlgoDeduce

Figure out the relation between the input and the expected result in this inductive programming game.
Write and test your hypothesis using this Prequel programming laboratory.

Play code golf on average instructions executed.

Read a description of what to implement or deduce the algorithm.

Prequel Programming Lab

Prototype your game ideas in this no-frills programming lab.

Note that, programming programming games is also possible.

More examples

Looking for additional Prequel examples?

AmoebaArena

Develop your own Prequel bot to control a team of amoebas.
Use the built-in debugger to test your code.

Try this programming game here.

Maze

This is a puzzle where the goal is to escape from a labirinth.

Get out of the labirinth here.

Battleship

The century-old game Battleship can be used to practise Prequel skills.

Try the Battleship mechanics here.

ConnXxis

Rotate and swap tiles (or develop your own heuristics in Prequel) to find a better solution to this 34-digit search space puzzle, and enter the ConnXxis Hall of Fame.

Try this hexagonal tiles puzzle here.

Factorial

The traditional "Hello, World!" program written in Prequel would be:

      print("Hello, World!")
    

For another classic first program example, try the Factorial here.

Let us know if you find interesting variations on calculating the factorial function in Prequel :)

Listsort

Sort a list in ascending order, given a custom procedure to move an element (listsort.move).

On a worst-case scenario, how many instructions does it take to sort a list of length ten? How about memory footprint? Edit the code. How does your program fare compared to the default provided?

Try the Listsort example here.

Ackermann

Prequel imposes a programming discipline that prohibits recursive calls and unbounded loops. The runtime system derives its Turing completeness from re-entering a module whenever the execution slips past its last instruction.

This scholastic example shows a Prequel implementation of the Ackermann-Péter function. The Ackermann function is one of the earliest-discovered total computable functions that is not primitive recursive.

Try the Ackermann example here.

Tools

Standardizer

When all you need is a Prequel executable, use this tool to reduce a Prequel program to its essence.

Documentation

Primer

If you already know other imperative programming languages, this Prequel primer should be enough to get you started.

Talk slides

Here are the slides from a talk on Prequel, providing some context and the theoretical underpinnings of this programming language.

Grammar

Here you can find a Backus-Naur form formally describing the syntax of a Prequel program.

Source code

The parser and interpreter for Prequel is available on GitHub.

About

Prequel stands for Primitive RECursive driven programming Language.

Prequel was created in 2017 by Hugo Simoes to provide his kids with the tools he wished to have had when starting to program.

Contact us at prequel@prequel-lang.org.
(Except if you claim to be some kind of prince with a fortune to offer.)
No spam please.

Happy Prequel programming!