Für den Laien Brainfuck ist eine Turing-complete Sprache mit nur 8 Befehle, von denen alle wörtlichen Äquivalente in C:Ausführungskontrollstrukturen in Brainfuck
bf c
----------------------
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. putchar(*ptr);
, *ptr=getchar();
[ while (*ptr) {
] }
auf jedem Linux-Distribution, die einen Paket-Manager hat, Sie sollten in der Lage sein, das Paket beef
, einen Brainfuck-Interpreter zu finden und zu installieren, damit Sie zu Hause mitspielen können.
Wie Sie oben sehen können, hat aber Brainfuck eine Kontrollstruktur, […]
, die zu C übersetzt:
while (*ptr) { … }
mit dem Sie alle Kontrolle über IF VAR = 0 THEN GOTO 10
von BASIC gibt. Im Folgenden wird getchar()
rufen, bis er zurückkehrt 0
:
, # *ptr = getchar();
[ # while (*ptr) {
>, # *(++ptr) = getchar();
] # }
Aber was, wenn ich will nur \n
zu einem Newline Zeichen lesen? einige Schwierigkeiten Einwickeln mein Gehirn Nachdem sich um, wie dies als eine einfache if
arbeiten angepasst werden könnte, kam ich mit dem Follow-up:
, # *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;
] # }
(Wenn jemand einen besseren Weg, dies zu tun hat, lass es mich wissen)
Jetzt sagen wir, ich möchte Break out dieser Schleife auf \r
zusätzlich zu \n
testen. Wie kann ich beides testen, da ich nur eine Möglichkeit habe, aus der Schleife auszubrechen? Mein Ziel ist es, emulieren switch
, verschachtelt if
s oder if/else if
s.
Es _no_ ernste Frage über eine solche hirntoten Sprache sein kann. In der Tat, so sollte es heißen: Braindead :-) – paxdiablo
Sie, mein Herr, sind ein tapferer Mann. – Pierreten
@SCMadsen Hier ist "Hallo Welt": "++++++++++ [> +++++++> ++++++++++> +++> + <<<<-]> ++. > +. +++++++ .. +++.> ++. << +++++++++++++++.>. +++ .------ ....>>.>. ' – NullUserException