# Erlang Cheatsheet

## Overview of unique features

- Functional programming language
- Designed for building concurrent and distributed systems
- Uses lightweight processes instead of threads
- Supports hot-swapping of code
- Can be used for building telecom and messaging systems

## Variables

```erlang
% Declare a variable
X = 42.

% Declare a constant
- define(Y, 10).

% Declare a tuple
MyTuple = {apple, 3}.

% Declare a list
MyList = [1, 2, 3].
```

## Functions

```erlang
% Define a function
add(X, Y) ->
 X + Y.

% Call a function
Result = add(3, 4).
```

## Loops

```erlang
% Define a loop
my_loop(I) ->
 case I > 10 of
   true -> done;
   false -> my_loop(I + 1)
 end.
```

## Conditionals

```erlang
% Define an if-else statement
max(X, Y) ->
 if X > Y ->
   X;
 true ->
   Y
 end.
```

## Processes

```erlang
% Define a process
my_process() ->
 receive
   {From, Message} ->
     From ! {ok, Message},
     my_process()
 end.

% Start a process
Pid = spawn(my_module, my_process, []).

% Send a message to a process
Pid ! {self(), "hello"}.

% Receive a message from a process
receive
 {ok, Message} -> io:format("Received ~p", [Message])
end.
```

## Resources

- [Erlang documentation](https://www.erlang.org/docs)
- [Erlang tutorial](https://learnyousomeerlang.com/content)
- [Erlang forum](https://stackoverflow.com/questions/tagged/erlang) for community support and troubleshooting.