Brainfuck: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m →‎Istruzioni condizionali: accento di troppo
Nessun oggetto della modifica
Riga 131:
==== Copiare un [[byte]] ====
 
Brainfuck non include nessuna operazione per copiare bytesbyte. Questo deve essere fatto con i costrutti di ciclo e gli operatori aritmetici. Muovere un byte è abbastanza semplice; muovere il valore di [0] a [1] può essere fatto come segue:
 
[->+<]
Riga 155:
7
 
(Ora le cose iniziano a diventare un po' più complicate. Noi possiamo riferirci ai bytesbyte nell'array come [0], [1], [2], e così via.)
 
Il primo numero è inserito in [0], e gli si sottrae 48 per ottenere la cifra corrispondente (i codici ASCII per i numeri da 0 a 9 sono infatti quelli da 48 a 57). Questo è fatto mettendo un 6 in [1] ed usando un ciclo per sottrarre 8 da [0] il numero corrispondente di volte. (Questo è un metodo comune di sommare o sottrarre grandi numeri) Successivamente, si inserisce il segno di somma in [1]; si inserisce infine il secondo numero, sovrascrivendo il simbolo di somma.
Riga 173:
Il primo numero è inserito in [0], l'asterisco e poi il secondo numero sono inseriti in [1], ed entrambi i numeri sono corretti sottraendo da essi 48.
 
Ora entriamo nel ciclo principale della moltiplicazione. L'idea base è che ogni volta attraverso esso noi sottraiamo uno da [0] ed aggiungiamo [1] al totale corrente tenuto in [2]. In particolare: il primo ciclo interno sposta [1] su entrambi [2] e [3], mentre azzera [1]. (Questo è il metodo base per moltiplicare un numero.) Il prissimoprimissimo ciclo interno sposta [3] indietro all'interno di [1], azzerando [3]. Poi uno è sottratto da [0], e il ciclo esterno viene terminato. Uscendo da questo ciclo, [0] è zero, [1] continua a contenere il secondo numero, e [2] contiene il prodotto dei due numeri. (Abbiamo fatto attenzione tenendo il primo numero, potevamo aggiungere uno a [4] ogni volta attraverso il ciclo esterno, poi spostare il valore da [4] indietro ad [1] in seguito.)
 
Ora aggiungiamo 48 al prodotto, inseriamo un risultato in [3], visualizziamo il prodotto usando i caratteri ASCII, e poi visualizziamo il risultato che abbiamo memorizzato.
 
== Commento ==
Poiché ogni locazione di array è specificata come un byte, il comando - è superfluo e potrebbe essere rimpiazzato con 255 comandi +. Similarmente, se l'elemento dell'array fosse finito e circolare, < potrebbe essere sostituito con (dimensione array - 1) comandi >. Tuttavia, sia la dimensione dell'array che la capacità delle celle devonodeve essere illimitateillimitata se il linguaggio vuole essere [[Turing]]-conformecompleto, altrimenti avrebbe un numero finito di stati. (È precisamente per questa ragione che anche un PC moderno non è [[Turing]]-conformecompleto in senso stretto).
 
== Linguaggi di programmazione simili ==