Pyramid Scheme

From Esolang
Jump to navigation Jump to search
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.

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)

External resources