haralang

Podělte se o své zkušenosti s jinými jazyky.
harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červen 18, 2014, 7:44 pm

Omlouvám se, má chyba. Kompiloval jsem to na několikrát a nedopatřením jsem nezazipoval tu správnou verzi. Teď už by to snad mělo fungovat. Příště si budu dávat větší pozor, co vypouštím do světa (ačkoliv jak se znám, moc se to nezlepší...).
Inteligent ovládá chaos!

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 18, 2014, 8:10 pm

Další chyba... operátor != při porovnávání stringů (i primitivně jako c(a!=b)) vrací vždy false
po 40 vteřinách...
A ještě, příkazu c() se nelíbí, když má jako první znak true větve "+" - to by nemělo dělat problém

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červen 18, 2014, 9:35 pm

D-Sheep, ty jsi nejlepší debugger, jaký bych si mohl přát! :) Já vím, připadám si hloupě, když mě musíš upozorňovat na takovéhle primitovnosti... Obdivuji tvou trpělivost se mnou!
"!=" jsem opravil, ale to "+" v true větvi by podle mě být neměl, protože je to znak, který umožňuje pohyb do všech čtyř směrů a interpret by si s ním nevěděl rady. Proto myslím, že by měl přijímat pouze (v ^ < > | a - v odpovídajících směrech - tj. když píšeš horizontálně a true větev napíšeš pod podmínku, nemůžeš např. použít "^" nebo "-", protože prvním případ je úplný nesmysl a s druhým by si interpret nevěděl rady, kam pokračovat).
Inteligent ovládá chaos!

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 18, 2014, 9:37 pm

:3
Počkej, a jak v c() nastavuješ směr čtení? Když si přece vyberu směr dolů a náhodou je tam +, tak přece pokračuju dolů, ne?

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červen 18, 2014, 9:43 pm

Nastavuješ směr čtení stejně jako na začátku čtení souboru v levém horním rohu:

Kód: Vybrat vše

-c(a=a)-w(false)e
    |
    >w(true)e

-c(a=a)-w(false)e
    v
    >w(true)e

-c(a=a)-w(false)e
 v--<
 >w(true)e

-c(a=b)-w(false)e
    >w(true)e
(přičemž první a druhý zápis je ekvivalentní)
A to všechno pak ještě pro zbylé 3 směry psaní + nahoře/dole vpravo/vlevo.
Inteligent ovládá chaos!

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 18, 2014, 9:52 pm

Dělej, jak myslíš, ale já v tom stále nevidím velkou překážku (jestli se skutečně pletu, tak se mi zasměj). Do zákulisí interpreteru sice nevidím, ale doufám že tam je něco jako array znaků, po kterých se pohybuje "Program counter" a když dojede k příkazu c, tak najde operátor, nebo jeho =část a potom se kouká kolmo na přechozí směr čtení. Když je tam nějaká kravina, jako další kolmý směr, tak je pochopitelný, že se to interpreteru nelíbí a sprdne mě, ale u plusu, který zdaleka ničemu nebrání, by to tak podle mě nemuselo být. Nejen, že mi to přijde rozumný, ale dokáže to v těsných situacích šetřit místo. Snažím se totiž udělat něco jako

Kód: Vybrat vše

-c(/0/=/2/)v
v-----+----<
|     >w(some stuff)v
v-------------------<
a mám to dost namačkaný vedle sebe, ale asi tam prostě přidám pár řádků navíc... Koneckonců je to vlastně jedno.

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červen 18, 2014, 10:05 pm

Prosím :( Nechci se nikomu smát a už vůbec ne někomu, kdo mi tady pomáhá.
Máš pravdu, je to šetřič místa, budeme tedy předpokládat, že při splnění podmínky se bude pokračovat ve směru kolmém ke směru psaní podmínky.
Vyčkej, prosím, chvíli, za minutu aktualizuji odkaz ke stažení.
Inteligent ovládá chaos!

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 19, 2014, 12:17 am

No, byl to dlouhý boj nejen s mými chybami, ale i chybami interpreteru. Výsledkem je nicméně na dlouhou dobu vrcholná práce... Systém elektronické pošty s upravovateným počtem uživatelů, kapacitou schránek, přihlašováním uživatelů přes hesla a managementem zpráv. 8-)
V haralangu celkem nemyslitelná záležitost, co?

Zde je ta černá magie:
Spoiler: ukázat

Kód: Vybrat vše

v  Slot3: Max. user count             |  Slot5: Data start point
|  Slot4: Mailbox capacity            |  Slot6: User DB start point
|  (You can change the values below)  |  Slot7: User database length
|                                     |  Slot8: First allocable space
|                                     |  Slot9: User data length
>/3/(500)/4/(1000)v                
v<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
>/5/(50)a+(/5/,1,/6/)a+(/3/,1,/7/)a+(/5/,/7/,/8/)a+(4,/4/,/9/):5:(0)---v
v(resu weN ]N[)w(nigoL ]L[)w(!liamaraH ot emocleW)w(------)w-----------<
>w([Q] Quit)r(/0/)c(/0/=N)c(/0/=n)------------------------------------v|
v----------------------<-------<                                      ||
>c(:5:</3/)w(Sorry, too many users already registered!)---------------+^
      >/10/(/6/)a+(/10/,:5:,/10/)a*(:5:,/9/,:10:)a+(:10:,/8/,:10:)---v||
v(/6/)/31/(:5:)/21/(/0/)r(emanresu a kciP)w<(/11/,3,/01/)+a(:01:)/01/<||
>/14/(:13:)-------c(/12/>0)a+(:5:,1,:5:)v  ^------------------------< ||
|                       >c(:14:!=/0/)---+w(This name already exists)^ ||
^-(/21/,1,/21/)-a(/31/,1,/31/)+a<       | >w(User ':10:' registered!)-+^
v(0):11:(/0/)r(drowssap a teS)w(/0/):01:< ^(/0/):11:(/11/,1,/11/)-a<  ||
>w(Confirm the password)r(/1/)c(/1/!=/0/)a-(/11/,1,/11/):11:(0)----^  ||
^-----(.niaga yrt esaelp ,hctamsiM)w<                                 ||
v------------------------------------(l=/0/)c(L=/0/)c-----------------<|
|     >a+(/10/,1,/10/)a-(/12/,1,/12/)v >------->/10/(/6/)/12/(:5:)v    |
|v(/0/=!:11:)c--(:01:)/11/(0=/21/)c--<(/0/)r(?emanresU)w----------<    |
||                          >w(User '/0/' is not registered!)----------^
|>w(Password?)a+(/11/,1,/13/)>r(/0/)---------------c(:13:!=/0/)-------v|
|     >------->w(Goodbye.)e  ^(niaga yrt ,drowssap gnorW)w<v(/11/)/01/<|
>c(/0/=Q)c(/0/=q)w(Unknown command)------------------------+-----------^
                                                           |           |
v(0>:11:)c(/11/,/01/,2)+a(!:01: ,emocleW)w(------)w--------<---------< |
|  >w(You have :11: unread messages!)v                               | |
>w(You have no new messages.)-------->w([N] New message)---------v   | |
v(drowssap egnahC ]P[)w(segassem eteleD ]D[)w(segassem daeR ]R[)w<   | |
>w([Q] Logout)r(/0/)c(/0/=N)c(/0/=n)--------------c(/0/=Q)c(/0/=q)---+v|
                         >------->----------v          >------->-----++^
v--(/6/)/11/(0)/21/(/0/)r(:tneipicer retnE)w<-------------------<    ^+<
>/14/(:11:)c(/0/=:14:)----c(/12/<:5:)w(No such user registered.)^     ||
^(/11/,1,/11/)+a+(/21/,1,/21/)+a<                                     ||
                >a+(/14/,3,/13/)c(:13:</4/)w(:14:'s inbox is full!)---+^
                                      >a+(:13:,1,:13:)a-(/13/,1,/13/)v||
                    v(/31/,1,/31/)+a(/31/,:31:,/31/)+a(:31:,1,:31:)+a<||
                    >w(Type your message:)r(:13:)w(Message sent!)>----+^
v-----------------------------------------------------(r=/0/)c(R=/0/)c<|
|  v(/31/,:11:,/11/)+a(:11:)/21/(0=:11:)c(/11/,/01/,3)+a<-------<      |
|  |                              >w(Your inbox is empty.)-------------^
|  >----------->w(------)w(### Message /12/ ###)w(:13:)a-(/12/,1,/12/)v|
|              ^------------------------------(0=/21/)c(/31/,1,/31/)-a<|
|                                               >a+(/10/,2,/11/):11:(0)^
>c(/0/=D)c(/0/=d)-----------------------------------------------------v|
      >------->----->w(Are you sure you want to delete all messages?)v||
                  v(/0/)r(segassem peeK ]N[)w(segassem eteleD ]Y[)w--<||
                  >c(/0/=Y)c(/0/=y)c(/0/=N)c(/0/=n)w(Unknown command)^||
     v---(/11/,2,/01/)+a<-------<  >---->------->---------------------+^
     >:11:(0)a+(/11/,1,/11/):11:(0)^(dnammoc nwonknU)w(p=/0/)c(P=/0/)c<|
                        >w(Denied!)^                    >------->-----v|
 v-(:drowssap weN)w(:11:=!/0/)c(/0/)r(:drowssap dlO)w<(/11/,1,/01/)+a-<|
 >r(/0/)>w(Confirm password:)r(/1/)c(/1/=/0/)v                         |
        ^(.niaga yrt esaelp ,hctamsiM)w-+----<                         |
                                        >:11:(/1/)w(Password changed!)-^
harakiwimu dávám svolení k použití pro promo účely.

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červen 20, 2014, 5:40 pm

Páni! Tak tímhle kódem jsi mi dočista vytřel zrak! Je to... je... "nemyslitelná záležitost", správně! Opravdu smekám, Pane.

Děkuji mnohokrát za sdílení kódu (kódů) a za svolení k použití k promo účelům. Rozhodně bych tvůj kód rád prezentoval při maturitě a snad bude příležitost i jinde.
A omluvám se za těžkosti s interpretem a se mnou...

Hádám, že svou vrcholnou prací si teď dáš od haralangu pauzu. Funkce snad stihnu implementovat ještě do prázdnin, ale nevím, nevím, čeká nás teď ve škole uklízení, výlet a pak ještě nějaká soutěž a snad i brigáda. Ale jakmile bude hotovo, dám sem zprávu.

Ještě jednou děkuji za veškerou tvou pomoc a opět smekám! Jsi borec ;)
Inteligent ovládá chaos!

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červen 25, 2014, 5:30 pm

Nová verze obsahuje mj. slibované funkce. Tímto si dávám od vývoje krátkou pauzu, alespoň do doby, než budu mít více času. Děkuji všem za podporu. Mějte se; školákům příjemné prázdniny, pracujícím pěknou dovolenou :)
Inteligent ovládá chaos!

SpotRudloff
Příspěvky: 54
Registrován: leden 14, 2012, 1:18 pm

Re: haralang

Příspěvek od SpotRudloff » červenec 26, 2014, 6:05 pm

Určitě je to super nápad a hrozně se mi líbí. Když si člověk kód nenavrhne předem, většinou skončí tím, že buď skončí úplně a nebo musí překopat celý zdrojový kód. Je to prostě zábava.

Zkoumal jsem to teď nějakou dobu, udělal jsem půlku textové hry a narazil jsem na pár problémů. Funkce nemohou být volány odjinud, jelikož se nadají pojmenovat. Musím se k nim dostat šipkami. To znamená, že vlastně místo funkce můžu použít normální sektor kódu, jen musím vynaložit o 2% víc úsilí.

Kód: Vybrat vše

-f(v)-e
   >w(Hello World)-w(Nemusím si nechávat zadní vrátka, jelikož je to funkce)-b

Kód: Vybrat vše

-v>e
 |^--------------------------------------------------------------------<
 >w(Hello World)-w(Nechal jsem si zadní vrátka, jelikož to není funkce)^
Takže funkce mi vlastně akorát ušetří pár sekund, když budu držet prst. Funkce by měla být definována takto:

Kód: Vybrat vše

-f(direction, name)-e
   >-b
Abychom se k ní potom nemuseli vracet. Vím, že na tom "vracení" se a křižovatkách je ten jazyk postaven, ale v tom případě funkce nemají vůbec žádný smysl, jelikož mohou být nahrazeny sekcí kódu. V jiných jazycích jsou funkce, protože se třeba ke staršímu kódu nedá nijak dostat a tak by se musel zbytečně opakovat. Ale tady se můžu vrátit, takže ho opakovat nemusím. Je to to samé jako s cykly (které jsi, podle dokumentace, do interpretu nepřidal). Tedy - cyklus si ve tvém interpretovaném jazyce vytvořit můžu, bez nějaké jeho definice.

Kód: Vybrat vše

-/0/(0)>c(/0/>9)-a+(/0/, 1, /0/)v
       |     v                  |
       ^-----+------------------<            
             >w(s0 has the value of /0/)-e
Takže vlastně nevidím smysl tvoření funkcí tímhle způsobem. Buď smazat úplně nebo přidat možnost volat funkci odkudkoliv bez směrování kódu. Takhle bych to uvítal já.

Jinak. Psal jsem spíš v PSPadu, jelikož tam můžu nastavit kurzor přesně tam, kam potřebuju. Nemusím dávat mezerník, ani nic podobného. Ve tvém editoru vidím dole šipku, která má ukazovat směr psaní kódu. Ale nefunguje. Takže bych editor udělal tak, že by se v něm přepisování znaků (insert) nemuselo používat, ale že by se text automaticky psal na stranu, do které kód potřebuju. Myslím, že když zahnu vlevo <, tak editor začne sám od sebe psát zprava doleva.

Nechci to do toho kecat, ale je to jenom pár rad, aby se mi to celkově víc líbilo. I když už takhle je to prostě boží.
Vale decem, in memoriam ad aeternam.

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » červenec 29, 2014, 2:59 pm

Á, díky za chválu i kritiku :)
Funkce... Máš pravdu, že funkce se nedají pojmenovat, a tudíž ani volat bez "připojení" k místu volání. Přesto v nich vidím smysl a to ten, že ať už se k té dané fci dostaneš odkudkoliv, příkaz b tě vždy vrátí na místo volání. Co to znamená? Že můžeš vytvořit "svodní potrubí" (svodní od slova svést něco někam :D), ke kterému se budeš postupně napojovat a po té, co se dostaneš k funci a provede se, back tě vrátí zpět k místu volání. Teoretický příklad: Řekněme, že máme databázi uživatelů, každý z nich má určité ID, které je odvozeno od pořadí registrace, tzn. ID 0 se zaregistroval 1., ID 1 2. atd. Postupem času jsi některé z nich povýšil na adminy - znáš ID adminů. A nenapadne tě nic lepšího, než vypsat všechny ID adminů a pořadí jejich registrace a třeba jim ještě poslat zprávu a spoustu dalších věcí, které by se suprově řešily v cyklu, kdyby ta ID byla zvolena pravidelně, což nejsou, a tedy pro každé administrátorské ID bys musel každou operaci psát zvlášť. Ale nemusíš, protože jsou tu funkce:
Spoiler: ukázat

Kód: Vybrat vše

>/0/(0)-f(v)v
          >-+v }-\
v(v)f-(5)/0/<|   |
| >----------v   |
>/0/(7)-f(v)v|   |
          >-+v   |
v(v)f(02)/0/<|   |
| >----------v   |
>/0/(45)f(v)v|   |
          >-+v   |
v(v)f(41)/0/<|   |
| >----------v   |
>/0/(24)f(v)v|   \
          >-+v    -- toto je "svodní potrubí"
v(v)f(61)/0/<|   /
| >----------v   |
>/0/(87)f(v)v|   |
          >-+v   |
v(v)f(26)/0/<|   |
| >----------v   |
>/0/(6)-f(v)v|   |
          >-+v   |
v(v)f-(9)/0/<|   |
| >----------v   |
>pq          |   |
v------------< }-/
>/99/(/0/)a+(/99/,1,/99/)------------v
b(/99/ ej /0/ DI s eletavizu idaroP)w<
...tady spousta dalších operací...
("svodní potrubí je ta přímka střídajících se "|" a "v")
V závislosti na počtu adminů se dostaneš na úsporu mnohonásobně vyšší než 2% ;)
Vím, že pro práci by bylo příjemnější mít možnost si funkci klasicky pojmenovat a pak ji volat, v tomhle právě vidím jednu z odlišností mého jazyka od ostatních a rád bych ji ponechal.

S cykly je to přesně tak, jak píšeš :) while ani for jsem nepovažoval za důležité implementovat, když si je snadno každý "vytvoří" a jejich přímou implementací by snad ani nedošlo ke zkrácení zápisu.

Co se editoru týče, no :D Chvíli jsem přemýšlel, že bych editor haralangu udělal ve formě addonu právě pro PSPad, což ale zkrátka asi není možné (nezkoumal jsem to podrobněji, ale nemyslím si, že by mě PSPad nechal vytvořit pár dalších kontrolek, pohybovat caretem, atd.). Proto jsem se snažil vytvořit něco na ten způsob.

U mě ukazatel směru psaní funguje bez problémů (Win 7 x64) a to jak při změně směru na numeričce, tak i pomocí Ctrl+šipka. Mohl bys mi to, prosím, nějak ukázat, třeba na videu? Stejně tak funguje i psaní v daném směru (kvůli tomu je dobré mít zapnuté přepisování znaků - o to se stará editor).

Zatím mě stále nejvíc trápí ty nepředvídatelné pády editoru, zdá se, že snad už tuším, kde je zakopanej pes - v tom vlastním caretu (ta věc, co ukazuje, kam se napíše další znak), ale stále neznám přesný spouštěč.

Zkus ještě pořádně vyzkoušet ten editor, třeba jsem jenom něco špatně vysvětlil v helpu, protože mně se v porovnání s obyč. PSPadem nebo Poznámkovým blokem v harapadu pracuje líp (až na ty pády... :/)

Ještě jednou díky :)
Inteligent ovládá chaos!

SpotRudloff
Příspěvky: 54
Registrován: leden 14, 2012, 1:18 pm

Re: haralang

Příspěvek od SpotRudloff » červenec 31, 2014, 12:54 pm

Dobrá, přeskočím rovnou k Harapadu. Ve Windows 8.1 (x64) se mi už píše správně, ale musím opravdu použít numerickou klávesnici. JENŽE! Jakmile určím směr, přetočí se mi monitor:

Kód: Vybrat vše

-f(v)-w(f_end)e
   >
Jakmile jsem udělal šipku >, přetočil se mi monitor na výšku. A to udělal jak monitor, tak se to stalo i když jsem PC připojil k televizi.
Vale decem, in memoriam ad aeternam.

harakiwi
Příspěvky: 71
Registrován: srpen 6, 2011, 12:13 pm

Re: haralang

Příspěvek od harakiwi » srpen 5, 2014, 5:00 pm

Dnes se mi konečně dostal do ruky notebook taktéž s Win 8.1 x64 a bohužel (či snad naštěstí) se žádné přetáčení monitoru se nekonalo. Říkal jsem si, zda by to třeba nemohlo být kvůli .NET frameworku (harapad by měl vyžadovat 4.5), ale Win 8.1 už by měli defaultně obsahovat 4.5.1 (http://msdn.microsoft.com/en-us/library/5a4x27ek.aspx). Nevím, zda jsou nové verze zpětně kompatibilní, tak snad můžeš zkusit nainstalovat verzi 4.5 z výše uvedeného odkazu.
Inteligent ovládá chaos!

Uživatelský avatar
D-Sheep
Příspěvky: 768
Registrován: září 7, 2011, 10:17 pm
Facebook: http://facebook.com/sheepdave
Bydliště: Praha, CZE
Kontaktovat uživatele:

Re: haralang

Příspěvek od D-Sheep » červen 8, 2015, 7:52 pm

Tak jak dopadla maturita? :3

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti