Upload failed. Maybe wrong permissions?

User Tools

Site Tools




Furcsa programnyelvek

Kis blogom előző írása olyan programnyelvekről szólt, amiket abból a célból hoztak létre, hogy megkönnyítsék az ember és a számítógép kapcsolattartását. Éppen ezért nem említettem a világtörténelem legősibb programnyelvét, a gépi kódot, amely nagyjából így néz ki: 11100010010101100010010010010010100101001010100101010100101010100101110110000011110101001011101010101011010010101101010101
    Ez itt nem értelmes program, csak nyomogattam a két billentyűt, de az értelmes programok is így néznek ki. A világ minden programja így néz ki „belül”, hiszen a számítógépek mindmáig csak egyeseket és nullákat ismernek, úgyhogy végső soron minden programot ezekre kell lefordítani, hogy a gép végrehajthassa. Mindazonáltal emberi szemszögből a gépi kód elég furcsa programnyelv.
  De vannak olyan programnyelvek is, amiket direkt tettek furcsává. A programozók is emberek, szeretnek játszani. És a játékaikból néha érdekes dolgok sülnek ki.

1898-2.jpgAmit itt lát az olvasó, az egy festmény és egy program. A festmény Piet Mondrian Kompozíció sárgával, kékkel és pirossal című festménye, készült 1921-ben, olaj és vászon – a program pedig Thomas Schoch Piet című programja, amely Piet nyelven íródott, és arra szolgál, hogy kiírja a Piet nevet. (Ejtsd pít, a Pieter rövidítése.) Találós kérdés: melyik melyik?
  Gondolom, a megfejtés akkor is könnyű, ha az olvasó nem ismeri ezt a festményt, hiszen nyilvánvaló, hogy ha Mondrian lilát is használt volna, az benne lenne a kép címében. A Piet programnyelvet a De Stijl híres művészéről nevezte el kidolgozója, David Morgan-Mar, akinek honlapján már nyolc ilyen ezoterikus programnyelv szerepel, mind saját alkotása. De a Piet a legszebb. A programok itt absztrakt festményeknek néznek ki, mert mindegyik egy-egy kép, amin színek jelzik a különböző műveleteket. Húsz színt használ (hatot három-három árnyalatban, plusz a fehéret és a feketét), ennyivel a világon mindent meg lehet írni.

Hiszen például a Brainfuck nyelvnek nyolc jel is elég, ami egyúttal azt is jelenti, hogy ha a nyolc jel jelentését megtanultuk, akkor elméletileg tudunk programozni Brainfuckban. A Brainfuck program egy képzeletbeli szalaggal operál, amin számok lehetnek, a program indulásakor csupa nulla. Van egy „hol tartunk a szalagon” mutató. Ennyit kell tudni ahhoz, hogy megértsük a nyolc jelet:
  > eggyel jobbra lépteti a mutatót;
  < eggyel balra lépteti a mutatót;
  + a mutató által jelzett számot eggyel növeli;
  - a számot eggyel csökkenti;
  . kiírja a mutató által jelzett számhoz mint ASCII-kódhoz tartozó karaktert;
  , beolvas egy karaktert és a kódját tárolja a szalagon a mutatónál;
  [ ha a mutatónál levő szám nulla, akkor a megfelelő ]-hez ugrik;
  ] visszaugrik a megfelelő [-hez.
  Ezennel gratulálok az olvasónak: éppen elvégezte a LAttilaD.org első teljes nyelvtanfolyamát.
  A nyelv azért kapta az agybaszó nevet, mert ez a nyolc jel ismétlődik a végtelenségig. A szabály szerint minden egyéb jelet át kell ugrani, azok tehát megjegyzésnek számítanak. A világ minden programnyelvén meg szoktak írni legalább egy programot, a Hello, worldöt. Feladat: kiírni egy üdvözletet a világnak. Brainfuck nyelven ez így néz ki: ++++++++++ [>+++++++> ++++++++++ >+++>+<<<<-] >++.>+.++++ +++..+++. >++.<<+++ +++++ +++++++.>. +++.------. --------.>+.>. Szóközöket csak azért tettem bele, hogy a böngészőnek legyen esélye tördelni valahogy.
  Ami lenyűgöző a dologban, hogy ez a zagyvaság nemcsak működik, de érthető, felfogható, ha az ember veszi hozzá a fáradságot. Az első tíz pluszjel a szalag első cellájának értékét megnöveli 10-re (hiszen minden nulláról indul). Ezután csinálunk egy ciklust (a két szögletes zárójel között), ami a következő cellákban a 70, 100, 30 és 10 számokat helyezi el, és visszamegy az első cellához. Ha most egyet jobbra lépünk és kettőt növelünk, abból 72 lesz, vagyis a H betű kódja. Egyet jobbra, egyet növelünk, 101, a kis e betű kódja. És így tovább, ide-oda lépkedve, állítgatva a számértékeket, a megfelelő pillanatban kiírva a karaktert – kijön a szöveg.
  A Brainfuck természetesen egy Turing-gép. Ezeket Alan Turing brit matematikus találta fel, és azóta számtalan matematikai problémát segítettek megoldani, de néha a valóságban is megépítenek egyet-egyet (például Denis Cousineau legóból csinált, be is mutatja ezen az oldalon). A Turing-gép nagyon röviden egy olyan gép, ami egy vagy több szalagból és egy író-olvasó mechanizmusból áll. Ez a fej mozog a szalag mentén (illetve általában a szalagot tekerik ide-oda és a fej áll). A szalagon olvasott adatok arra utasíthatják, hogy mozduljon a szalagon balra vagy jobbra, írjon a szalagra vagy változtassa meg belső állapotjelzőjét.
  A Brainfuck egy kétszalagos Turing-gép: az egyik szalagon (amit csak olvasni lehet és csak egy irányba) a program van, a másikon az adatok.

Bármilyen extravagáns a Brainfuck, mégiscsak hasonlít a többi programnyelvre abban, hogy a programot az elején kell elkezdeni, aztán sorban olvasni a jeleket. A Befunge nyelvben ez nem így van. A nyelv kétdimenziós. Egy négyzetrácsban helyezzük el a jeleket, és mindenféle irányokban szaladgálunk benne.
  "egnufeB">:#,_@
  Ez mindazonáltal egy egyenes vonalban megírt program. Baloldalt kell kezdeni és jobb felé haladni. A jelek a következőket csinálják:
  " a következő idézőjelig minden karakter kódját a verembe teszi;
  > irány jobbra;
  : a verem tetején levő értéket megduplázza;
  # trambulin: átugorja a következő karaktert;
  , kiírja a verem tetején levő számhoz tartozó karaktert, levéve a veremről;
  _ vízszintes HA utasítás (ha a verem tetején nulla van, akkor jobbra kell menni, különben balra);
  @ vége a programnak.
  Van több is, de ezek szerepelnek itt.
  Sok más nyelvhez hasonlóan a Befunge is veremmel működik. Az adatokat egy veremben helyezi el, egymás tetején, mindig a legutolsónak berakott adatot lehet kivenni legelőször.
  A program tehát sorban a verembe teszi a Befunge szó betűit, visszafelé, utoljára a B betűt. Aztán ezt a : megduplázza (BBefunge) és a , kiírja. Az _ megnézi, mit talál a vermen (el is dobja onnan), és mivel nem nullát, balra fog menni, vissza a ,-höz. Most az e betű jelenik meg. A duplázáson átugrat minket a trambulin, aztán a > visszafordít jobbra. Most duplázunk, kiírunk, megvizsgálunk, visszafordulunk… Amikor elfogy a szöveg, az _ nullát talál a veremben (mármint üres vermet), tehát jobbra fog menni, és véget ér a program.
  Ez pedig egy igazi kétdimenziós Befunge program. Érdemes figyelni a nyilakat (< > v ^), amint összevissza kanyarogtatják a végrehajtást.
  

Ezek a nyelvek azért furcsák, mert megszegik a programnyelvek írásának elemi szabályát – ami éppen azért nemlétező szabály, mert meg lehet szegni és úgy is létrejöhetnek programnyelvek. A szabály, ami tehát nem létezik: „programnyelvet azért írunk, hogy a gép és az ember közötti kommunikációt az ember számára minél könnyebbé tegyük, tehát olyannak kell lennie, hogy a programozó számára minél érthetőbb legyen”. Ezek a nyelvek más szempontokat követnek.
  Olyan programnyelv is van, ami követi a szabályt, és mégis furcsa.
  
  Ez itt egy program. Az öt kis szövegblokk nem a tartozéka, csak a szerző magyarázatai. Magát a programot a színekkel jelölt táblácskák alkotják, az ikonokkal, a nyúlványokat összekötő színes drótokkal, a narancssárga kerettel. Ez annyira szép, hogy muszáj még egyet mutatnom.
  
  1898-6.jpg  Ez a NXT-G programnyelv, ami éppen azért ilyen színes-rajzos, hogy jól érthető legyen. Ezen a nyelven a jobbra látható NXT gépet programozzák, ami a Lego Mindstorms sorozat tartozéka, és olyan robotokat építenek vele, mint például a BrickSorter, ami képes szín szerint szétválogatni legókockákat (ámbár, mint a videón látható, néha hibázik).


Láng Attila D., 2008.10.4.

Befunge Brainfuck Cousineau‚ Denis De Stijl gépi kód legó Lego Mindstorms matematika Mondrian‚ Piet Morgan-Mar‚ David NXT-G Piet programnyelv programozás Schoch‚ Thomas számtech Turing-gép Turing‚ Alan

Csak ülök és programozokDíjtartozás

Hozzászólások

Hozzászólás írása. Wikiszintaxis használható: