[HK][Furor] Finite loops

Helló mindenki, mostantól a programnyelvemmel kapcsolatos blogbejegyzések címe a [Furor] taggal kezdődik majd, esetlegesen előtte egy [HK] is lesz jelezve hogy Harold King blogja... Mindez annak érdekében hogy akit ez a téma nem érdekel (vagy én nem érdeklem őt úgy totál egyáltalán...) azok ne kattintgassanak rá feleslegesen. Ugye efféle igény felmerült itt többször, és hát legyen meg az ő lelki nyugalmuk...

Sóval s tetvvel, hehehe... Egy csomó minden elkészült már a Drágaszágból. Jó kis cucc lesz ez nagyon...

egy programnyelv mind fölött, egy nyelv mely kegyetlen, egy a verembe zár, bilincs a lelkeden, Furor éjfekete földjén, RPN misztikus mezején...

hogy szabadon idézzem a klasszikust...

Tehát, mondom, sok minden készen van, de nem elegendően sok... Mindenesetre, jelentős, nehéz dolgokkal vagyok meg! Ideje már annak azt hiszem, hogy bemutassak valami konkrét példát. Mondjuk a nyelv maga még totál semmire se használható, nem is Turing-teljes a jelenlegi állapotában mert még műveleteket se tud végezni a Drágaszágom, de az a legkisebb gondom, azt megcsinálom egyetlen óra alatt akkor is ha 40 fok lázzal ágyba dönt a koronavájrúsz... Viszont bemutatom most a finite loop-om működését a gyakorlatban mert arra már okés a jelenlegi formájában. Tehát íme előszöris a prograny:

."Elkezdtem!\n"
#g
."{}  {+}  {-}  {--}" NL
5 {|
{} print 4 {| SPACE |} {+} print 4 {| SPACE |} {-} print 4 {| SPACE |} {--} print NL
|}
."vége!" NL

Jó, na, ne keressetek benne semmi optimalizációt, tele van kód-duplikációval, de még nem fejlesztettem bele a szubrutinhívást... Mindegy, ráér. A lényeg hogy a futási eredménye ez:

Elkezdtem!
{}  {+}  {-}  {--}
0    1    5    4
1    2    4    3
2    3    3    2
3    4    2    1
4    5    1    0
vége!


Na most mi is ez a misztikus izé? Ez az, hogy a {| jelzi a ciklusfejet, a |} pedig a ciklusvéget. Ami e kettő közt van, az a ciklus, és a ciklus a stack tetején specifikált darabszámszor fut le, azaz a példa szerint 5 alkalommal.

A feladata semmi más, mint hogy több alkalommal is kiírja nekünk a ciklusváltozó aktuális értékét. A kiírás - ki hinné - a print utasítással történik. Alapértelmezés szerint a print a stack legfelső elemét mint egy unsigned long long értéket írja ki, ezen az értelmezésen lehet változtatni amúgy, de most nem megyek bele minden részletbe mert a ciklus a lényeg perpillanat.

Tehát a ciklus kiírja a ciklusváltozót. Igenám, de a ciklusváltozót különböző - fogalmazzunk úgy "aspektusok szerint" kérdezhetjük le! Erre szolgálnak a következő furcsa szimbólumok:

{} Ez a ciklusváltozót úgy tekinti hogy nullától kezdődik, emiatt a ciklusfejléc előtt specifikált érték mínusz egy a legnagyobb érték amit felvehet.

{+} Ez a ciklusváltozót úgy tekinti hogy 1-től kezdődik, emiatt a ciklusfejléc előtt specifikált érték maga a legnagyobb érték amit felvehet.

{-} Ez a ciklusváltozót úgy tekinti hogy a ciklusfejléc előtt specifikált érték a kezdőértéke, és innen kezdve minden alkalommal eggyel csökken az értéke, eképp 1 a legkisebb érték amit felvehet.

{--} Ez pont az mint az előző pont, de annál eggyel kisebb értéket ad vissza mindig, eképp 0 a legkisebb érték amit felvehet, a legnagyobb meg a ciklusfejléc előtt specifikált érték mínusz egy.

Az NL egy újsor karaktert ír ki, a stringkonstans kiírása mint látható ugyanúgy megy mint a FORTH nyelvben, a #g pedig épp azt állítja be hogy a print utasítás miként viselkedjék (milyen típusúnak tekintse a kiiratandó adatot). Különben az adott példában a #g szerepeltetése totál felesleges mert ez az alapértelmezés a program indulásakor, de jobb szeretek nem az alapértelmezésekben bízni...

Látható, a ciklusaim egymásba ágyazhatóak, mert a lényegi cikluson belül több apró ciklus is van, ezek:

4 {| SPACE |}

ami egyszerűen 4 darab szóközkaraktert ír ki. Nyilván persze ezt meg lehetne oldani másképp is, sokkal előkelőbben, ez csak egy gyorsan összecsapott példa...

Nemcsak a belső, de az eggyel „kijjebbi” azaz külső ciklus ciklusváltozóit is le lehet kérdezni speciális szimbólumokkal. Ezek a szimbólumok teljesen megegyeznek az előbb bemutatottakkal, csak kétszer annyi bennük a kapcsos zárójelek száma... Íme egy program erre is:

 

."Elkezdtem!\n"
#g
."{{}}  {{+}}  {{-}}  {{--}}   "
."{}  {+}  {-}  {--}" NL
3 {|
3 {|
SPACE {{}} print 6 {| SPACE |} {{+}} print 6 {| SPACE |} {{-}} print 6 {| SPACE |} {{--}} print 6 {| SPACE |}
{} print 4 {| SPACE |} {+} print 4 {| SPACE |} {-} print 4 {| SPACE |} {--} print NL
|} |}
."vége!" NL

Eredménye:

Elkezdtem!
{{}}  {{+}}  {{-}}  {{--}}   {}  {+}  {-}  {--}
 0      1      3      2      0    1    3    2
 0      1      3      2      1    2    2    1
 0      1      3      2      2    3    1    0
 1      2      2      1      0    1    3    2
 1      2      2      1      1    2    2    1
 1      2      2      1      2    3    1    0
 2      3      1      0      0    1    3    2
 2      3      1      0      1    2    2    1
 2      3      1      0      2    3    1    0
vége!

 

UPDATE: Beletettem a szubrutinhívás lehetőségét is. Íme az iménti példa ezzel megoldva, a szóközök kiírása szubrutinba lett téve, látjátok majd belőle a címkekezelést is, meg a goto működését, az outputja természetesen teljesen ugyanaz mint a korábbi változatnak:

."Elkezdtem!\n"
#g
."{{}}  {{+}}  {{-}}  {{--}}   "
."{}  {+}  {-}  {--}" NL
3 {|
3 {|
SPACE {{}} print sbr §spc6 {{+}} print sbr §spc6 {{-}} print sbr §spc6 {{--}} print sbr §spc6
{} print sbr §spc4 {+} print sbr §spc4 {-} print sbr §spc4 {--} print NL
|} |}
."vége!" NL
end
spc6: 6 goto §spc
spc4: 4 spc: {| SPACE |} rts

 

Finite ciklusaimnak megadható kezdőérték is, amikoris úgy tekinti hogy annyi alkalommal már lefutott a ciklus. Lássuk az előbbi példát úgy is, hogy a belső ciklus 5-ig kéne menjen, de 2-es kezdőértékkel indítjuk! Mint látható, ekkor a ciklusfej mnemonikjának alakja ilyen kell legyen:

{||

A ciklusvég jelölése nem változik. Szóval a program ekkor:

."Elkezdtem!\n"
#g
."{{}}  {{+}}  {{-}}  {{--}}   "
."{}  {+}  {-}  {--}" NL
3 {|
2 5 {||
SPACE {{}} print sbr §spc6 {{+}} print sbr §spc6 {{-}} print sbr §spc6 {{--}} print sbr §spc6
{} print sbr §spc4 {+} print sbr §spc4 {-} print sbr §spc4 {--} print NL
|} |}
."vége!" NL
end
spc6: 6 goto §spc
spc4: 4 spc: {| SPACE |} rts

Outputja:

Elkezdtem!
{{}}  {{+}}  {{-}}  {{--}}   {}  {+}  {-}  {--}
 0      1      3      2      2    3    3    2
 0      1      3      2      3    4    2    1
 0      1      3      2      4    5    1    0
 1      2      2      1      2    3    3    2
 1      2      2      1      3    4    2    1
 1      2      2      1      4    5    1    0
 2      3      1      0      2    3    3    2
 2      3      1      0      3    4    2    1
 2      3      1      0      4    5    1    0
vége!

 

Na egyelőre ennyi drága gyermekeim az Úrban s az Űrben...

Hozzászólások

De gustibus non est disputandum.

Véleményem szerint egyáltalán nem nyeri meg majd a tetszésedet a nyelvem többi részrendszere se, teljesen mindegy mennyit erőlködnék ezen. Ennek oka az, hogy RPN rendszerű, az ilyenek pedig mindig sokkal nehezebben áttekinthetőek első blikkre mint az infix notationt alkalmazók. Szóval ezek után már mindegy, a többi eleme milyen, mert aki a „könnyűséget” keresi benne, úgyse találja meg.

Amúgy ez a ciklusos jelölésrendszer igenis rendelkezik értelemmel, céllal! Minden ciklus végeredményben egy nyitó kapcsos zárójellel kezdődik, s egy záróval végződik. Eképp ha ráállsz az egyikre, a szövegszerkesztőd máris megmutatja a párját, így látható, hol kezdődik és végződik a ciklus. A ciklusváltozók szimbólumai is azért kapcsos zárójeles tákolmányok, mert ezzel eleve tudhatod ha rápillantasz, hogy a ciklusokhoz van valami köze annak az izének. Lehet hogy nem tudod konkrétan mi a fenét jelent, de tudod hogy „ja ez valamit a ciklusokkal kapcsolatban csinál”. További logika benne hogy egy darab kapcsos zárójelpár van azon ciklusváltozó-szimbólumokban amik az aktuális azaz legbelső ciklusra vonatkoznak, és kettő mindabban ami a külső ciklusra vonatkozik.

Szóval ebben igenis VAN logika, több szinten is!

Oké, azt elismerem, TANULNI KELL. Körülbelül az a helyzet vele mint a VIM kezelésével: hatékony, de össze kell nőni vele, tanulni kell, igen... nyilván én magam se hiszem azt hogy kezdőknek való és ezzel kéne kezdeni a programozás megszerettetését az általános iskola alsó tagozatában...

Bár fene tudja. Igaz nem alsós koromban, de alig voltam nagyobb, ötödik általános iskolás, amikor a programozást tanulni kezdtem a Ti-58 programozható zsebszámológépen. Nézz utána milyen, ha neked kimaradt az életedből netán... Annak lényegében csak assemblyje volt. Az én Furor nyelvem se nehezebb annál, sőt...

Na mindjárt írok egy blogbejegyzést arról, ki a programnyelvem célközönsége!

Obsessed commandline-maniac.

Dobozos verzió? Ember, ez nem eladott termék lesz hanem opensource... Én nem a Micro$oft vagyok...

De ha szlogeneklnél tartunk, az angol doksi amit kezdtem írni hozzá valahogy így kezdődik:

"The programming language with efficient line noise"

...and scrawls...

 

BEWARE! Usage of this programming language may lead to mind-injury or cerebral-death!

 

My motto:

- It’s not the smartest thing to make the programming language we are about to create unfathomably difficult. But the programming language, which doesn’t make possible to write unfathomably difficult, hard-to-understand codes is not a good one; it’s not efficient enough, because it offers too little possibilities...

 

Well, there are so many troubles,

Until the codes mix doubles,

And it sparks no idea-flower,

Building my program-tower...

 

 

Obsessed commandline-maniac.

Igen, gusztustalanul nez ki. Viszont arra, amire Poli hasznalna, ez pont alkalmasabba teszi. Tolkien is az Elf nyelvet a Gyuruk urahoz alkotta (egyesek szerint forditva, mellesleg ez a 2. legnepszerubb mesterseges nyelv a Klingon es az Eszperanto kozt). Poli regenyebe megiscsak jobban illeszkedik valami fura, nem foldi kinezetu nyelv, mint monduk egy Python.

When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin

Na VÉGRE VALAKI MEGÉRTETTE!

Köszönöm e bejegyzésedet drága barátom!

Természetesen ez amit írtál, bár IGAZ, de NEM jelenti azt hogy szándékosan igyekeznék a kód olvashatóságát rontani. Sőt, tőlem tellően igyekszem épp áttekinthetőbbé tenni... De mégis, amit írtál igaz, mert teljesen nyilvánvaló volt számomra a kezdetektől fogva, hogy nekem kizárólag jó lesz a regényembe, ha a szintaxis, általában véve a nyelv „kinézete”, az „egzotikus” valamiféle homályos értelemben!

Épp emiatt, bár ismétlem törekszem a szintaxis emberbaráttá tételére, de megmondom és bevallom teljesen őszintén, ez nálam egy meglehetősen sokadlagos szempont, eléggé hátul kullog a szempontok rangsorában. Ha például valami szintaxisról kiderül hogy az interpreterbe egyszerűbb kód elég hozzá, ahhoz hogy az interpreter fel tudja azt dolgozni (tokenizálni, stb), vagy ha a tokenizált kód futtatása jelentősen felgyorsítható vele, akkor én azt bizony alkalmazni fogom, akkor is ha teljesen szembemegy mindennel amit egy „hagyományosabb” nyelveken dolgozó programozó megszokott és „szentnek tart”.

Elég sok mesterséges emberi nyelvet megalkottak már a világon irodalmi céllal (én is megtettem...), de tudomásom szerint én vagyok a világon az első író, aki egy PROGRAMnyelvet alkot meg IRODALMI céllal (elsősorban).

Obsessed commandline-maniac.

Szerkesztve: 2020. 03. 24., k - 12:00

-

Köszönöm szépen, hogy konstruktívan áltál hozzá a javaslatomhoz! Hajrá!

Köszi a biztatást, jólesik!

Legfőbb célom a békesség amúgy. Én úgy vagyok vele, hogy engem se érdekel eszméletlenül sok téma itt a HUP-on... De rá se kattintok azokra amiknek a címéből kiderül hogy nem érdekelnek, és nem járok az olyan topikokba csak azért hogy elkezdjem szapulni a topiknyitót miért blogol erről, és takarodjon innen és hülyeség amit ír meg felesleges és satöbbi...

Hasonlóképp ha mégis rákattintok valamire de rájövök hogy nem érdekel, szó nélkül továbbállok és nem írok oda semmit. És nem tudom megérteni, mások miért nem így vannak ezzel... Mi a jó abban, bántani a másikat?!

De épp mert engem is rengeteg téma nem érdekel, teljes mértékben el tudom fogadni hogy amit én írok az se érdekel mindenkit. Semmi baj nincs ezzel se, még azzal se ha egyáltalán senkit se érdekel, úgyis számtalanszor bevallottam hogy elsősorban magamnak írom ezt a Furort. Az ilyen embereknek akiket ez nem érdekel, valóban hasznos lehet ha első pillantásra tudják a címből hogy e blog nem nekik van szánva. Arra is rájöttem, tényleg lehet abban valami hogy fura fickó vagyok, elég sokakat irritál a stílusom vagy a témák amikkel foglalkozom, ezeknek is jobb ha rá se kattintanak az írásaimra, de nekem is jobb mert hátha úgy kevesebb szurkapiszkáló megjegyzést kapok ami csak irritálna engem és elvenné az időmet értelmesebb dolgoktól...

Mindezekbe belegondolva, a javaslatod a legkifejezettebben hasznosnak tűnt a számomra, és nemcsak megfogadom, de ezúton külön köszönetemet is kifejezem neked érte! Még akkor is ha világosan kiderül belőle hogy téged nem érdekelnek a témáim. Ismétlem ezzel abszolút semmi baj, csak az a lényeg hogy ne bántsuk egymást. Ahogy édesapám mondogatta mindig: „Élni és élni hagyni!”

Obsessed commandline-maniac.