Vlákno názorů k článku Algebraické datové typy v Pythonu od tzl - Díky za článek, zajímavé okénko, i když ta...

  • Článek je starý, nové názory již nelze přidávat.
  • 6. 5. 2025 8:56

    tzl

    Díky za článek, zajímavé okénko, i když ta terminologie mne mate. Například na začátku jsou zmíněny operátory and a or - ale v textu jsem nic co by bylo jako "typový and" nenašel - aspoň ne ve smyslu průniku, jak mi to přijde přirozené a je třeba v Lispu - např

    (and (integer 0 3) (satisfies evenp))

    je 0 nebo 2. Tím operátorem and se tedy myslí některý ze součinových typů (record, tuple)? Na druhou stranu používat and pro v podstatě kartézský součin mi nepřijde čisté.

    A proč vlastně to sjednocení musí být disjunktní? Aby v tom match case nezáleželo na pořadí klauzulí?

  • 6. 5. 2025 9:23

    Pavel Tišnovský
    Zlatý podporovatel

    "typový and" je implicitní u záznamů (tedy v Pythonu u n-tic, pojmenovaných n-tic a datových tříd). Vlastně se tam nepřímo říká něco ve stylu: typ User je složen položky typu Name A SOUČASNĚ z typu Surname atd. Lepší je používat ten původní termín product type, ten to vystihuje lépe, protože popisuje "mohutnost" výsledného typu (viz ten příklad se záznamem s několika položkami typu boolean).

    Termín "and" vychází z Curryho–Howardova isomorfismu z teorie typů. To jsem mohl uvést, ale zase jsem ten článek nechtěl udělat "akademickým". Pořád si myslím, že teorie typových systémů je důležitá (ale nedokončená :-), na druhou stranu to může lidi strašit, i když v praxi je to třeba v Pythonu vlastně strašně jednoduché.

  • 6. 5. 2025 15:53

    Pavel Tišnovský
    Zlatý podporovatel

    re disjunktní - vlastně ano, i z tohoto důvodu. on ten flow musí být dost jednodznačný, aby to typovému systému pomohlo s analýzou kódu