ceckovy kviz

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Středa Září 6 08:35:10 CEST 2023


...Tu teda
if (C=D, A=B) {};
priradi B do A, zahodi sa vysledok, potom sa priradi D do C...

Opravdu v tomto poradi? cekal bych, ze se to bude vyhodnocovat zleva doprava, no jeste, ze to nepouzivam ;-)


Dne 06.09.2023 v 8:15 Jan Waclawek napsal(a):
> C=D je priradovaci vyraz, ktory jednak priradi hodnotu D do premennej C,
> ale co je rozdiel oproti normalnym jazykom, je, ze okrem toho ma aj
> navratovu hodnotu, ktorou je ta ista hodnota ktora bola priradena (C99
> 6.5.16#3).
>
> (To, spolu s ignoraciou potreby diferencovat boolean a integer typy, je aj
> dovod, preco je spominane
>
> if (A = B) {}
>
> v C korektny vyraz.)
>
> if (vyraz1, vyraz2) vyuziva tzv. comma operator (C99 6.5.17). To je znova
> specialita v C, vyhodnoti sa lavy vyraz, jeho vysledok sa zahodi, potom sa
> vyhodnoti pravy vyraz a jeho vysledok je vysledkom celeho vyrazu.
>
> Tu teda
> if (C=D, A=B) {};
> priradi B do A, zahodi sa vysledok, potom sa priradi D do C a ta ista
> hodnota sa vyhodnoti kvoli if() (false = 0, true = cokolvek ine).
> Da sa to teda ekvivalentne zapisat aj ako
> A = B;
> C = D;
> if (C) {};
>
> ale mozu tam byt detaily ktore odovodnuju ten "skrateny" zapis (napr. ze to
> je jeden vyraz takze sa da nieco s makrom alebo neda alebo nieco take,
> nemam chut nad tym rozmyslat).
>
> Podobne
> if (--i, A=B) {};
> priradi B do A, zahodi vysledok, dekrementuje i a pouzije vysledok toho
> dekrementu na vyhodnotenie kvoli if().
>
> for cyklus je len inak zapisany while cyklus, for (a; b; c) {d;} je to iste
> ako
> a; while (b) {d; c;}
> len pre cloveka v obvyklych situaciach citatelnejsie. Takze
>
> for (; i--; ++j, ++k) {xxx;};
>
> je to iste ako
> while(i--), {xxx; ++j, ++k};
>
> Presnu interpretaciu toho i-- necham na domacu ulohu. :-)
>
> ----
>
> Co sa tyka historie, pisal som o tom na mikrozone taky serial asi pred 10
> rokmi. C nie je evolucne hned po asm, ale mentalne ano. Po asm evolucne
> prvy jazyk je FORTRAN, ktory bol optimalizovany kompilovany jazyk. Ak
> niekto pozna FORTRAN, tak si mozno odpluje; ale ak sa zamysli nad tym, ze
> to bola koniec 50tych rokov ked este operacna pamat bola napriklad
> magneticky bubon, tak sa hlboko pokloni az po zem.
>
> Potom vznikli rozne "pragmaticke veci" ako COBOL a BASIC, ale to bolo este
> take neriadene. Ale z FORTRANU evolucne vznikol Algol, a to uz bolo nieco,
> pretoze na tom pracovali najvacsie mozgy tych cias. Bohuzial, neskor to s
> Algolom68 (a PL/1 co je suvisiaca story) prestrelili, z coho reakciou
> vznikol Pascal ako zjednodusenie, ktore si ale zachovava klucove dobre
> prvky, ktore sa za to desatrocie vykrystalizovali (a goto, co je vtip ku
> ktoremu treba vediet pozadie).
>
> C vznikol tiez ako reakcia na PL/1, ale bohuzial nie extrakciou toho
> dobreho, ale divokym bastlenim, slovo "hack" je tu plne namieste, tak isto
> ako "prenositelny makroasembler PDP-11". Ten i++ (a rovnako ++i, i--, --i)
> je nic ine ako inkrement adresy ktory je vedlajsim produktom adresovacich
> modov v PDP-11; aj presne s tym poradim pouzitia povodnej hodnoty vs.
> inkrementovanej hodnoty (pre-increment, post-increment). Neexistencia
> booleanu ako typu je nasledok toho, ze povodne v C (resp. v jeho internej
> evolucnej verzii). Atd., proste ako sa to Ritchiemu (a Thomsonovi, pre
> ktory to pisal) v tom okamihu hodilo.
>
> Mimochodom, Ritchie za najvacsi vynalez v C pokladal to, ze sa mu podarilo
> implementovat mechanizmus imitujuci polia bez toho aby implementoval polia
> (nemam chut terz hladat ten clanok, da sa najst ako archivna Ritchieho
> stranka v AT&T alebo tak nejak). To vela vysvetluje.
>
> Cize C je taky hnusny zlepenec nesuvisiacich veci. Dost sa to podoba Unixu
> no a nie nahodou. Precitajte si Unix Hater's Handbook, vela to objasni,
> vratane predslovu od Ritchieho.
>
> [reklama] Ta moja knizka je PRESNE o tomto, PRESNE o tych historickych
> suvislostiach a vselijakych hackoch z ktorych sa C sklada. Nie nahodou.
> Tiez som bol - a dodnes som - frustrovany a ta knizka je len supis tych
> frustracii, nic menej, nic viac. [/reklama]
>
> Ale ano, dokonalost neexistuje; jazyky postavene na pevnych pravidlach
> ludia mozu pokladat za obmedzujuce; C je defacto standard s mnozstvom
> prekladacov pre vsetky mozne targety, atd.atd.
>
> Svet nie je ciernobiely.
>
> wek
>
>
>
> ----- Original Message ---------------
> Pěkně prosím, můµete ty tři "úsporné" příklady trochu rozvést? Koukám na to
> jak vrána, jsem taky přeučenej pascalista :)
>
> Díky.
>
> Pavel Kutina
>
>
>
> ----- Original Message -----
> From: "d.petr" <d.petr na post.cz>
> To: "HW-news" <hw-list na list.hw.cz>
> Sent: Tuesday, September 5, 2023 8:43 PM
> Subject: Re: ceckovy kviz
>
>
> i++: úsporněj±í zápis neznám, ale i jiné jazyky to pouµívají, určitě třeba
> Perl
>
> Podobná přiřazení občas pouµívám, ačkoliv ne úplně A=B, ale třeba
> if ((Vysledek = write (...)))
> Ty dvojité závorky potlačí výpis varování pro tento případ.
>
> Ale výjimečně napí±u třeba i něco na způsob
> if (C=D, A=B) {};
> if (--i, A=B) {};
> resp. for (; i--; ++j, ++k) {};
> Ale to fakt jen tehdy, kdyµ to nesniµuje čitelnost a přehlednost a kdyµ
> jsem
> přesvědčen, µe mi to ani v budoucnu nebude překáµet. :-)
>
> P.
>
>
> Martin Záruba napsal(a) dne 05. 09. 23 v 14:24:
>> ...
>> Uznávám, µe zápis je velmi úsporný. Například
>> i++;
>> nenapí±ete asi v µádném jiném jazyku úsporněji. Na druhou stranu....
>> Pouµili jste někdy někdo zápis
>>
>> if (A=B) {};
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list




Další informace o konferenci Hw-list