Skip to content

Commit

Permalink
start versioning
Browse files Browse the repository at this point in the history
  • Loading branch information
k0dev committed Nov 15, 2022
1 parent 34cabdc commit 43bc1ba
Showing 1 changed file with 157 additions and 0 deletions.
157 changes: 157 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
# Erlang :(

- Erlang è orientato alla concorrenza, ovvero il processo è la base di ogni computazione.
- Dinamically typed functional language
- It supports distribution, fault tolerance and hot-swapping


## Actor model
- Scambio di messaggi asincrono
- Memoria **non** condivisa

## Primo programma
```erlang
-module(factorial).
-export([factorial/1]).

factorial(0) -> 1;
factorial(N) -> N * factorial(N-1).
```
```erlang
> c(factorial).
{ok,factorial}
> factorial:factorial(7).
5040
> factorial:factorial(100).
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
```

## Numeri
- E' possibile specificare la base del numero con la seguente sintassi: base#num
- E' possibile usare la notazione scientifica
- Si può ottenere il char code di un carattere con $

TODO: float?
```erlang
> 10.
10
> -22.
-22
> 16#FF.
255
> 2#101.
5
> 17#G.
16
> $A.
65
> $G.
71
> -12.35e-2.
-0.1235
```

## Atomi
Gli atomi devono iniziare con una lettera minuscola. Se racchiusi tra apici possono iniziare con la lettera maiuscola e contenere caratteri speciali.
```erlang
> test_@atomo.
test_@atomo
> 'test & atomo'.
'test & test'
> 'Atomo'.
'Atomo'
```

## Tuple
Eterogenee, possono essere nidificate, ecc.

Sono tuple :D
```erlang
> {"a", "b"}.
{"a","b"}
> {}.
{}
> {colore, {120, 255, 80}}.
{colore,{120,255,80}}
> {{1,2},3}=={1,{2,3}}.
false
```

## Liste
Anche loro sono eterogenee.
```erlang
> [].
[]
> [1 | []].
[1]
> [1 | [2]].
[1,2]
> [1 | [2 | [3]]].
[1,2,3]
> [1, 2, 3].
[1,2,3]
> [1, "due", 3, ok].
[1,"due",3,ok]
```

Le stringhe sono liste di caratteri (evviva)
```erlang
> [$T, $e, $s, $t].
"Test"
```
Concatenazione di stringhe
```erlang
> "Uno "++"due".
"Uno due"
> [$T, $e, $s, $t]++" "++[$1, $2, $3].
"Test 123"
```
Sottrazione tra stringhe
```erlang
> "AAaabbcc"--"acbA".
"Aabc"
> "AAaabbcc"--"acbAc".
"Aab"
```

## Assegnamento
L'operazione di *assegnamento* binda un nome ad un valore. Una volta assegnato, non si può modificare.
Le "variabili" devono iniziare con una lettera maiuscola.
_ è anonima.
```erlang
> A = 1.
1
> B = 2.
2
> A = 4.
** exception error: no match of right hand side value 4
> _ = 4.
4
> _ = 9.
9
```
I binding sono creati mediante pattern matching.
```erlang
> [Hd|Tl] = [1,2,3,4,5].
[1,2,3,4,5]
> Hd.
1
> Tl.
[2,3,4,5]
> {X, _, Y} = {10, 20, 30}.
{10,20,30}
> X.
10
> Y.
30
```
## Funzioni
Vengono analizzate sequenzialmente fino a che una non effettua il match.
```erlang
name(pattern11 , pattern12 , ..., pattern1 n) [when guard1 ] -> body1 ;
name(pattern21 , pattern22 , ..., pattern2 n) [when guard2 ] -> body2 ;
...
name(patternk1 , patternk2 , ..., patternk n) [when guardk ] -> bodyk .
```

## Moduli

0 comments on commit 43bc1ba

Please sign in to comment.