mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +00:00
93 lines
3.7 KiB
Markdown
93 lines
3.7 KiB
Markdown
|
---
|
||
|
|
||
|
language: brainfuck
|
||
|
contributors:
|
||
|
- ["Prajit Ramachandran", "http://prajitr.github.io/"]
|
||
|
- ["Mathias Bynens", "http://mathiasbynens.be/"]
|
||
|
translators:
|
||
|
- ["Ivan Sala", "http://slavni.github.io/"]
|
||
|
lang: it-it
|
||
|
|
||
|
---
|
||
|
|
||
|
Brainfuck è un linguaggio di programmazione estremamente minimale,
|
||
|
ma è ingrado di rappresentare completamente una macchina di turnig,
|
||
|
e sfrutta solo 8 caratteri.
|
||
|
[Per saperne di più](http://it.wikipedia.org/wiki/Brainfuck)
|
||
|
|
||
|
```
|
||
|
|
||
|
Qualsiasi carattere che non sia "><+-.,[]" (escludendo gli apici) viene ignorato.
|
||
|
Branfuck è caratterizzato da un array (vettore) di 30,000 celle inizializzare a zero, e un puntatore che punta alla cella corrente.
|
||
|
|
||
|
Vi sono solo otto comando:
|
||
|
+ : Incrementa il valore della cella attuale di uno.
|
||
|
- : Decrementa il valore della cella attuale di uno.
|
||
|
> : Sposta il puntatore sulla cella seguente (prossima a destra).
|
||
|
< : Sposta il puntatore sulla cella precendete (precedente a sinistra).
|
||
|
. : Stampa il valore in ASCII della cella corrente. (es: 65 = 'A')
|
||
|
, : Legge un singolo carattere come input per la cella corrente.
|
||
|
[ : Se il valore della cella corrente è zero, conclude il ciclo
|
||
|
andando alla sua corrispondente ].
|
||
|
Altrimenti, passa alla prossima istruzione.
|
||
|
] : Se il valore della cella corrente è zero, passa alla prossima istruzione.
|
||
|
Altrimenti torna indetro fino alla [ corrispondente.
|
||
|
|
||
|
[ e ] creano un loop (while). Ovviamente dovranno essere bilanciati.
|
||
|
Per ogni [ dovrà corrispondere una ]
|
||
|
|
||
|
Alcuni semplici esempi di programmi scritti in Brainfuck:
|
||
|
|
||
|
++++++ [ > ++++++++++ < - ] > +++++ .
|
||
|
|
||
|
Questo programma stampa in output la lettera 'A'. Priam incrementa
|
||
|
la cella #1 fino a 6, Quindi la cella #1 viene usata per crare un ciclo.
|
||
|
Poi, entra in un loop ([) e si sposta alla cella #2.
|
||
|
Incrementa la cella #2 10 volte, e torna alla cella #1, e la decrementa.
|
||
|
Questo avviene 6 volte (servono che la cella #1 venga decrementata 6 volte
|
||
|
per raggiungere lo 0. Quindi passa alla corrispondente ] e prosegue).
|
||
|
|
||
|
A questo punto, siamo sulla cella #1, che ha valore 0,
|
||
|
la cella #2 ha valore 60 (6*10). Ci spostiamo sulla cella #2, incrementiamo
|
||
|
per 5 volte, e otteniamo il valore 65, quindi stampaimo il valore della cella
|
||
|
#2 (.).
|
||
|
65 è 'A' in ASCII, quindi alla fine viene stampata 'A'.
|
||
|
|
||
|
|
||
|
, [ > + < - ] > .
|
||
|
|
||
|
This program reads a character from the user input and copies the character into
|
||
|
cell #1. Then we start a loop. Move to cell #2, increment the value at cell #2,
|
||
|
move back to cell #1, and decrement the value at cell #1. This continues on
|
||
|
until cell #1 is 0, and cell #2 holds cell #1's old value. Because we're on
|
||
|
cell #1 at the end of the loop, move to cell #2, and then print out the value
|
||
|
in ASCII.
|
||
|
|
||
|
Also keep in mind that the spaces are purely for readability purposes. You
|
||
|
could just as easily write it as:
|
||
|
|
||
|
,[>+<-]>.
|
||
|
|
||
|
Try and figure out what this program does:
|
||
|
|
||
|
,>,< [ > [ >+ >+ << -] >> [- << + >>] <<< -] >>
|
||
|
|
||
|
This program takes two numbers for input, and multiplies them.
|
||
|
|
||
|
The gist is it first reads in two inputs. Then it starts the outer loop,
|
||
|
conditioned on cell #1. Then it moves to cell #2, and starts the inner
|
||
|
loop conditioned on cell #2, incrementing cell #3. However, there comes a
|
||
|
problem: At the end of the inner loop, cell #2 is zero. In that case,
|
||
|
inner loop won't work anymore since next time. To solve this problem,
|
||
|
we also increment cell #4, and then recopy cell #4 into cell #2.
|
||
|
Then cell #3 is the result.
|
||
|
```
|
||
|
|
||
|
E questo è brainfuck...Non è difficele, vero?
|
||
|
Per divertimento adesso puoi scrivere i tuoi programmi in brainfuck,
|
||
|
oppure puoi scrivere un interprete brainfuck in un altro linguaggio.
|
||
|
L'interprete è abbastanza semplice da implementare, ma se sei veramente
|
||
|
masochista prova ad implementare un interprete brainfuck in...
|
||
|
brainfuck.
|
||
|
|