# Introduction - Enigma
Enigma

## 1 A short introduction

Today, in the world of programming, the commonly used programming languages have — to some extent — adapted the same basic syntax. Both C, C++, Java, Python and Ruby (and others) all share several paradigms, even though they are still very different. Enigma, on the other hand, is very different from the “common” languages. See this small program to get an idea of Enigma:

    {/a,b/
        a 2 ! multiply = c;
        b c ! add = return;
    } = odd-add;

    9 4 ! odd-add | stdout temp ! write;

Here, 9 is first multiplied with 2 and then added to 4. The program then prints the result (22).

With only a few constructs and built-in variables, Enigma is quite small and relatively simple. Any logic can be expressed in Enigma. The above example may seem odd, but its aspects will be dealt with in the next chapter.

Enigma is not the kind of programming language that likes to control programmers. When programming in Enigma, one creates functions that call other functions — instead of creating functions that are called by built-in functions.

On the other hand, Enigma is very restrictive. There are limits to certain things. If these limits were not present, chaos would ensue. Perhaps.

Like many other languages, Enigma is quite fond of pointers. In Enigma, all variables are pointers. When `x` is assigned to `a`, and `b` is assigned to `a`, changing `b` also changes `a`. As a matter of fact, when two pointers points to the same place, they are forever linked together.

Enigma is not recommended for serious use. Use with caution!