# Pyramid Scheme

Paradigm(s) declarative Conor O'Brien 2017 Turing complete  Lisp `.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.

## Entymology

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