Portál AbcLinuxu, 2. května 2025 15:04

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
12.2.2010 12:34 Radek Miček | skóre: 23 | blog: radekm_blog
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
Odpovědět | Sbalit | Link | Blokovat | Admin

Pár poznámek ke kódu: Seznamy velmi často používáte jako pole, tj. snažil bych se vyhnout funkci lists:nth/2. Není třeba všude používat knihovní funkce viz třeba term:compare_strings/2, kterou by šlo napsat prakticky bez knihovních funkcí a byla by navíc efektivnější nebo napsat s knihovními funkcemi třeba takto (v Haskellu):

compareStrings as bs
  | as == bs  = Nothing
  | otherwise = Just $ length $ takeWhile id $ zipWith (==) as bs

V Erlangu je potíž s funkcí lists:zipwith/3, která přijímá jen stejně dlouhé seznamy tj. musel byste řetězce oříznout na délku toho kratšího.

s mým učením se funkcionálnímu jazyku erlang

Je dobře, že se učíte funkcionální jazyk, a doufám, že po Erlangu bude následovat Haskell :-)

vlastikroot avatar 12.2.2010 15:11 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server

Díky za připomínky. Doufám, že si nemusíme vykat ;-) Tu compare_strings/2 jsem přepsal, mě osobně se líbí mnohem víc

compare_strings(S1, S2) when S1 == S2 ->
     same;
compare_strings(S1, S2) when (S1 == []) or (S2 == []) ->
     {different,0};
compare_strings(S1, S2) when length(S2) > length(S1) ->
     compare_strings(S2, S1);
compare_strings(S1, S2) when length(S1) > length(S2) ->
     S1Part = lists:sublist(S1, length(S2)),
     compare_strings(S1Part, S2);
compare_strings(S1, S2) when length(S1) == length(S2) ->
     Same = lists:zipwith(fun(X, Y) -> X == Y end, S1, S2),
     {different,length(lists:takewhile(fun(X) -> X end, Same))}.

Použil jsem tu funkci lists:zipwith/3, o které jsem předtím nevěděl (díky :-)).

Ta funkce byla opravdu ošklivě napsaná, asi jsem se moc nesoustředil a jen psal takovým tím C stylem (funguje to, je to dobře).

S haskellem nevím, zatím pro něj nemám praktické využití (možná v budoucnu na nějakou matematiku etc.). Cesty programátora jsou nevyzpytatelné :-)

We will destroys the Christian's legion ... and the cross, will be inverted
13.2.2010 11:43 Radek Miček | skóre: 23 | blog: radekm_blog
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server

Takhle to vypadá lépe, ale zkus si zavolat compare_strings("auto","aut"). Já bych to napsal asi takto (bez funkcí z knihovny):

compare_strings(XS, YS) -> compare_strings(0, XS, YS).

compare_strings(I, [A|XS], [A|YS]) -> compare_strings(I+1, XS, YS);
compare_strings(_, []    , []    ) -> {same};
compare_strings(I, _     , _     ) -> {different, I}.
13.2.2010 11:47 Radek Miček | skóre: 23 | blog: radekm_blog
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
s/{same}/same/
vlastikroot avatar 13.2.2010 11:47 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
Hmm :-( mám se ještě co učit, v pohodě chápu jak to funguje, ale nevymyslel bych to ...
We will destroys the Christian's legion ... and the cross, will be inverted
13.2.2010 19:57 CiV | skóre: 3
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
Přidání parametru - akumulátoru je často používaná technika ve funkcionálním programování. To se hodí znát.
12.2.2010 12:52 Radek Miček | skóre: 23 | blog: radekm_blog
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
Odpovědět | Sbalit | Link | Blokovat | Admin

Chtěl bych se ještě zeptat, jestli se Erlang učíte díky KSP?

vlastikroot avatar 12.2.2010 15:12 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
Učím se ho jen ze svých šílených pohnutek :-D
We will destroys the Christian's legion ... and the cross, will be inverted
12.2.2010 23:56 pozortucnak | skóre: 21 | blog: vecny_windowsar
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
Odpovědět | Sbalit | Link | Blokovat | Admin
Ten miniúvod do erlangu by byl fajn... Možná by to ale nejdřív chtělo úvod do funkcionálního programování, přeci jen to vyžaduje jiný přístup...
Jsem mimořádně obtížný případ
vlastikroot avatar 13.2.2010 00:09 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
Já nevím, jestli bych si na něco takového troufnul, přecejen o funkcionálnim programování nevím zhola nic (a abych řek pravdu, ani o žádném jiném - to člověk prostě musí mít v krvi). Asi tak jen že je to jako každé jiné programování (imperativní, objektově orientované), jen má člověk silně omezenou ale mocnou množinu vyjadřovacích schopností. Navíc nemám rád teorii :-D
We will destroys the Christian's legion ... and the cross, will be inverted
vlastikroot avatar 13.2.2010 17:48 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
Odpovědět | Sbalit | Link | Blokovat | Admin
Tak, přidal jsem novou verzi 0.2 :-)
We will destroys the Christian's legion ... and the cross, will be inverted
xkucf03 avatar 14.2.2010 15:18 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
Odpovědět | Sbalit | Link | Blokovat | Admin
Pěkné, zkoušel jsem a funguje. Jen jsem měl trochu problém s editací řádku (backspace, delete…).

Tip na vylepšení: používat Jabber MUC jako „backend“ – udělat z toho telnetové rozhraní k místnosti v Jabberu. BTW: já teď zase pracuji na jednoduchém webovém rozhraní pro jabberové místnosti.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
vlastikroot avatar 14.2.2010 15:59 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
Jak přesně se projevují ty problémy s terminálem? Protože já to nikde jinde než u mě s telnetem z inetutils na xtermu nezkoušel. To MUC je zajímavý nápad, třeba někdy :-)
We will destroys the Christian's legion ... and the cross, will be inverted
vlastikroot avatar 14.2.2010 16:19 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
Přidal jsem další verzi, skus, jestli to pomuže. Byl tam problém s tím, že xterm posílá pro backspace /b, ale libvte terminály /0x127.
We will destroys the Christian's legion ... and the cross, will be inverted
xkucf03 avatar 14.2.2010 17:18 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
0.2.1 – to už je lepší, backspace a delete fungují. Teď ještě když nastavím kurzor na (ne za ale na) poslední písmenko řádku a snažím se něco napsat, chová se to „divně“ – jednou se přepíše, jindy se připíše před něj atd.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
vlastikroot avatar 14.2.2010 17:26 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: Vlastika ultra brutal erlang chat server
Uff. To těch verzí je. Každopádně díky za bugreporty :-)
We will destroys the Christian's legion ... and the cross, will be inverted
xkucf03 avatar 14.2.2010 17:36 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše verzování
njn, mohl by sis pořídit nějaký verzovací systém, ať to sem nemusíš dávat jako archívy :-P
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
vlastikroot avatar 14.2.2010 17:38 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
Rozbalit Rozbalit vše Re: verzování
Náš git server je momentálně down, tak proto ;-)
We will destroys the Christian's legion ... and the cross, will be inverted

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.