2010-08-06 13 views
7

Per i non iniziati, Brainfuck è un linguaggio Turing-complete con solo 8 comandi, che hanno tutti equivalenti letterali in C:Strutture di controllo di esecuzione in Brainfuck

bf c 
---------------------- 
>  ++ptr; 
<  --ptr; 
+  ++*ptr; 
-  --*ptr; 
.  putchar(*ptr); 
,  *ptr=getchar(); 
[  while (*ptr) { 
]  } 

In qualsiasi distribuzione Linux che ha un gestore di pacchetti, Dovresti essere in grado di trovare e installare il pacchetto beef, un interprete Brainfuck in modo da poter suonare a casa.

Come potete vedere sopra, Brainfuck ha ma uno struttura di controllo, che si traduce in […] C come:

while (*ptr) { … } 

che ti dà tutto il controllo di IF VAR = 0 THEN GOTO 10 da BASIC. Di seguito chiamerà getchar() fino a tornare 0:

, # *ptr = getchar(); 
[ # while (*ptr) { 
    >, # *(++ptr) = getchar(); 
] # } 

Ma cosa succede se voglio solo leggere a un char a capo \n? Dopo aver qualche difficoltà avvolgere il mio cervello intorno come questo potrebbe essere adattato per funzionare come un semplice if mi si avvicinò con il seguente:

,   # *ptr = getchar();  /* store input        */ 
---------- # *ptr -= 10;   /* test for \n by subtracting 10 before loop */ 
[   # while (*ptr) {   /* if *ptr == 0, last char read was \n  */ 
    ++++++++++ # *ptr += 10;   /* wasn't \n, add 10 back to val under ptr */ 
    >,   # *(++ptr) = getchar(); 
    ---------- # *ptr -= 10; 
]   # } 

(Se qualcuno ha un modo migliore di fare questo, per favore fatemelo sapere)

Ora diciamo che voglio testare l'interruzione di quel ciclo su \r oltre a \n. Come posso testare per entrambi, dato che ho solo una possibilità di uscire dal giro? Il mio obiettivo è essere in grado di emulare switch, nidificato if s o if/else if s.

+1

Non ci può essere _no_ seria domanda su un linguaggio come morte cerebrale. In effetti, è quello che dovrebbe essere chiamato: Braindead :-) – paxdiablo

+4

Signore, sei un uomo coraggioso. – Pierreten

+1

@SCMadsen Ecco "Hello World": '++++++++++ [> +++++++> ++++++++++> +++> + <<<<-]> ++. > + +++++++. .. +++.> ++. << +++++++++++++++.> +++. .------ .--------.> +.>. ' – NullUserException

risposta

3

Non ho ancora dato un'occhiata al collegamento, ma immagino che AShelly's answer sia probabilmente più universalmente utile ... tuttavia, non avendo osato lasciare che le mie dita digitassero un po 'di Brainfuck prima, ho deciso che ora era come buono di un tempo come qualsiasi ed è stato in grado di ottenere quanto segue, che I pensare funziona.

La seconda metà è solo per stampare ciò che è stato catturato dalla prima parte. Inoltre, non mentirò, il mio cervello si sentirà davvero "fottuto" dopo aver provato a farlo ... Un linguaggio molto appropriato, eh.

+ 
[ 
    >, 
    ---------- 
    [ 
     --- 
     [ 
      +++++++++++++ 
      >> 
     ] 
    ] 

    < 
    [ 
     >> 
    ] 
    < 
] 

++++++++++++ 
[ 
    < 
] 

> 
[ 
    .> 
] 
+0

Grazie per l'esempio! –

3

Vedere this page per una descrizione di come iniziare con la singola struttura di controllo BF e definire una serie di sequenze sempre più complesse che rappresentano operazioni più sofisticate.

4

Here sono algoritmi per eseguire operazioni logiche, ma complessa di base per Brain F * ck :)