Brainfuck (programlingvo)
esotera programlingvo From Wikipedia, the free encyclopedia
esotera programlingvo From Wikipedia, the free encyclopedia
Brainfuck estas minimumisma komputillingvo kreita de Urban MÜLLER ĉirkaŭ 1993. Ĉar "fuck" estas fivorto en la angla, la lingvo estas ankaŭ nomata Brainf*ck, Brainf***, (ŝerce) B****fuck[1], aŭ simple BF.
La celo de Müller estis krei simplan Turing-kompletan komputillingvon, kiu povus esti implementita per kiel eble plej malgranda tradukilo. La lingvo konsistas el nur ok instrukcioj. Versio 2 de la originala tradukilo, verkita por la komputilo Amiga, estis nur 240 bitojn granda.
Kiel sugestas la nomo ("Brainfuck" signifas "Cerbofiko"), programoj en Brainfuck inklinas al nekomprenebleco, kvazaŭ tiom, ke la programisto freneziĝu. Tamen, la Turing-maŝino, do tial ankaŭ Brainfuck, povas plenumi ajnan komputan taskon. Malgraŭ la malfacileco programi iajn taskojn en Brainfuck, tamen certe eblas fari tiel.
La lingvo estas bazita sur simpla maŝinmodelo, kiu konsistas el, krom la programo, tabelo komence nula, indiko al la tabelo (komence indikas al la unua bitoko de la tabelo), kaj du vicoj da bitokoj por enigo kaj eligo.
La unuaj ok instruckioj, ĉiu nur unuliteraj, estas:
Signo | Signifo |
---|---|
> | altigu la referencon je unu paŝo |
< | malaltigu la referencon je unu paŝo |
+ | altigu la bitokon ĉe la referenco je 1. |
- | malaltigu la bitokon ĉe la referenco je 1. |
. | eligu de la bitoko ĉe la referenco (en Askio). |
, | enigu al la bitoko ĉe la referenco (en Askio). |
[ | saltu antaŭen al la instrukcio post la responda ] se la bitoko ĉe la referenco estas nula. |
] | saltu malantaŭen al la responda [. |
(Por simetrieco, iuj diras ke ] saltas reen nur se la bitoko ĉe la referenco estas nenula, sed fine estas tute egale.)
Brainfuck-programoj povas esti transliteritaj al C per la jenaj anstataŭoj, kie ptr
estas de datumtipo char*
:
Brainfuck | C |
---|---|
> |
++ptr; |
< |
--ptr; |
+ |
++*ptr; |
- |
--*ptr; |
. |
putchar(*ptr); |
, |
*ptr = getchar(); |
[ |
while (*ptr) { |
] |
} |
Programo kiu eligas sur la ekrano "Hello, world!" ("Saluton, mondo!"), per unu linio de kodo kaj sen notoj, estas:
++++++++++[>+++++++>++++++++++>+++>+<<<<-] >++.>+.+++++++..+++.>++.<<+++++++++++++++. >.+++.------.--------.>+.>.
Brainfuck estas tre interesa pro ĉi tiu kazo, ĉar "Saluton, mondo" programo estas nek malgranda nek facile verkebla!
,.
Enigi unu signon de la klavaro kaj eligi ĝin al la ekrano
,[.,]
Sindaŭriga itero kiu prenas klavaran enigon kaj eĥigas ĝin al la ekrano. Rimarku ke ĉi tiu supozas ke 0 estas la signalo de enigofino; implementoj varias pri ĉi tiu temo. Versioj por -1 kaj "neniu ŝanĝo" estas ,+[-.,+]
and ,[.[-],]
,[.>,]
Versio de la lasta ekzemplo kiu ankaŭ konservas ĉiun enigon en la tabelo por estonta uzo, per ĉiufoje movi la referencon.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.