# Lambda Calculus Primer

Lambda Calculus Primer is an esolang created by User:LarhoCherqi. It comprises of only four characters (any other characters are not parsed). Given how simple this is, I am very confident that a concept similar to this already exists.

## Terminology

The storage system (what this article will call memory past this point) of Lambda Calculus Primer is a set (this article calls them sets but they're not sets, think of them more as arrays). Each element of the set can either be a set itself or a lambda. Lambdas are an instruction or a group of instructions that are stored in memory.

### Locations

In almost all instructions, a location is at play. A location is an index to a specific set in the memory. Locations in the context of programs are written as so:

• The starting memory set (`[]`)'s location would be nothing. Everything in memory resides in this set.
• If there were to be a set inside of the starting set, that set's location would be `[]`. For any additional elements, you add one extra `[]` to the location, so something at the second element of the main set's location would be `[][]`.
• To get a location for a set inside one of those sets, first get the location of the parent set, then treat that set as the new "starting set". Next, place the relative location of the child set inside the brackets of the parent set. Repeat this process until you have reached the set you are looking for.

An example of this will be demonstrated using Python list indices. If the memory is a list, then an element at `memory[2][1][0]` would have a location of `[][][[][[]]]`.

## Instructions

The spaces in the syntax are not required, they are just there for clarity.

### Period

The `.` character, when used as a command, can append or remove elements from any given set. An "element" can be either a set structure or a lambda. The syntax for `.` is the following:

```. item . location .
```

`item` is the element is being appended. `location` is what set the element gets appended to.

If `item` is nothing, the item at `location` is removed instead.

### Slash

The `/` character, when used as a command, can retrieve data from memory and return it to other commands. It can alternatively execute code. The syntax for `/` is the following:

```/ location .
```

`location` is where to get data from.

When an extra `/` is placed next to the existing one, it will execute the lambda stored at `location`.

### Brackets

When brackets are used as a command, the syntax is the following:

```[ check ] true . false .
```

If the set at the location `check` is the empty set (if there are no elements in it), run the lambda at the location `true`. If not, run the lambda at the location `false`. Both `true` and `false` can be nothing.

### Brackets (alternative use)

When `check` is nothing, the data at the memory location `true` is interpreted as a number and printed out. `false` is what mode to use when printing (the mode can either be `[]` or nothing at all). A number is represented by having a set contain `x` sets inside of it, with `x` being the number that's represented. If `false` is `[]`, the ASCII character that corresponds to the number gets printed instead.