# Rcpy

## Idea

RCPY is an esotheric programming language that is supposed to read as a recipe. It turned out te be something magical, where you can pass your 3 onions to cook potatos and end up with 100 potatos. This is really your party, but you have to program you own cake baking function... Don't tell your guests you made it with yogurt instead of whipped cream, they won't notice but still. It does this by butchering the english language. Example:

```   while: potatos < 100; (
potatos + 1 potatos
)
```

^ this is verry correct syntax

## Current features

Currently rcpy has the following features.

• literal arithmetic expressions
Example Explanation
12 a literal integer
onion a variable
• Binary arithmetic expressions
Operator Example Explanation
+ `onios + 2` adds an arithmetic to the preceding one
- `onions - 3` subtracts an arithmetic from the preceding one
* `onions * onion` multiplies an arithmetic with the preceding one
/ `100 / onions` divides an arithmetic with the preceding one
• Relational expressions
Operator Example Explanation
== `onions == scallions` returns true if onions is equal to scallions, false otherwise
< `onions < scallions` returns true if onions is smaller than scallions, false otherwise
> `onions > scallions` returns true if onions is greater than scallions, false otherwise
<= `onions <= scallions` returns true if onions is smaller or equal to scallions, false otherwise
>= `onions >= scallions` returns true if onions is greater of equal to scallions, false otherwise
• Assign statements

Arithmetic values can be assigned to variables.

```2 onions
3 scallions
```

Above here the value of '2' is assigned to onions and '3' is assigned to scallions. As you can see the assignment operator is not explicitly visible, that is because it is implicit. Also, as you can see assignments are also processed from right to left as opposed from normal languages. This allows one to do... unconventional things.

```scallions are better than onions and you cannot change my mind
```

The above code assigns all words in 'are better than onions and you cannot change my mind' to the same value as 'scallions', witch ironically disproves the statement.

### If statements

As noted previously onions now equal scallions. Example:

```   if: onions equal scallions; (
onions + scallions onions
)
```

^ Following this onions now equals 6. > sadly else () is not yet implemented

### While loops

While while loops work. Example:

```   while: potatos < 100; (
potatos + 1 potatos
)
```

### Return

Artithmetics can be returned with two keywords; `return` and `serve`

### Functions

This language has functions! Functions are declared by telling how to do something, with the keyword 'howto'. Example:

```   howto cook: bread, butter ; (
serve soup
)
```

Functions are then called like this: Example

```   potatos, onions; cook potatos
```

The parameters are specified left of the function call.

## Fibonachi

Here's a fibonachi example: Example:

```   300 onions
0 potatos

0 scalops
1 lettuce
1 index

1 loop

if: onions < 1; (
0 loop
)

if: loop ; (
while: index < onions ; (
lettuce stash
lettuce + scalops lettuce
stash scalops

index + 1 index
)
lettuce potatos
)

serve potatos
```

## How to run

```   python3 rcpy.py whatheverfileyouwanttocall.rcpy
```

## Limitations

### Negativity

Negative ingedients don't exist, that would be stupid... But if you do need them, don't tell anyone I told you this: Example:

```   0 - 5 broccoli

```

it will equal -5 broccoli.