Pyramid Scheme
- For the mostly-unrelated dialect of Scheme which targets EVM, see the external article "Write your next Ethereum Contract in Pyramid Scheme".
| Paradigm(s) | declarative |
|---|---|
| Designed by | Conor O'Brien |
| Appeared in | 2017 |
| Computational class | Turing complete |
| Reference implementation | [1] |
| Influenced by | Lisp |
| File extension(s) | .pyr, .pyra |
Pyramid Scheme is an esoteric programming language created by Conor O'Brien in early 2017. It is a dialect of Lisp, but it uses ascii-art pyramid structures as opposed to brackets.
Etymology
The name is a joke on the name of a different Lisp dialect called Scheme, and its similarity to a (widely frowned-upon and illegal) business model called the pyramid scheme.
Sample programs
If/Else statement
The following is an implementation of an if-else statement in pyramid scheme. It prints if A is 1 for truthy, and 0 if it is falsey
^ ^
/ \ / \
/set\ / \
^-----^ / ? \
/A\ /1\ ^-------^
--- --- /!\ / \
^--- /out\
/ \ ^-----
/ ? \ /0\
^-----^ ---
/A\ / \
--- /out\
^-----
/1\
---
This is equivalent to the lisp-like syntax:
(set A 1) (? (! (? A (out 1))) (out 0))
Modulo function
Pyramid scheme does not have an implementation of the modulo function. A modulo of a number has to, therefore, be calculated with repeated subtraction. The following implements the mod(a,b) function:
^ ^ ^ ^
/ \ / \ / \ / \
/set\ /set\ / \ /out\
^-----^ ^-----^ / \ -----^
/a\ / \ /b\ / \ / \ /a\
--- /33 \--- /16 \ / loop \ ---
----- ----- ^-----------^
/ \ / \
/ \ /set\
/ <=> \ ^-----^
^-------^ /a\ /-\
/ \ / \ --- ^---^
/<=>\ /-1 \ /a\ /b\
^-----^ ----- --- ---
/a\ /b\
--- ---
which is equivalent to lisp-like:
(set a 33) (set b 16) (loop (<=> (<=> a b) -1) (set a (- a b))) (out a)
External resources
- Pyramid Scheme on GitHub. Implemented in Ruby.
- Hello world in Pyramid Scheme on TIO
- Lisp-like to Pyramid Scheme compiler in Python.
- Marcin Konowalczyk, “Macro-driven metalanguage for writing Pyramid Scheme programs, SIGBOVIK 2021 proceedings p. 227; also has an associated talk.