Funktory v C++

Re:Funktory v C++
« Odpověď #45 kdy: 10. 05. 2017, 14:30:04 »
Podobně, proč se používá "fmap" (to je možná ještě horší, protože "type constructor" je aspoň výstižné)?
Jednoduše proto, že to má stejnou signaturu jako List.map, tak si to každej aspoň zapamatuje a je mu to intuitivně jasný ;)

Myslím, že to trochu hrotíš :)


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Funktory v C++
« Odpověď #46 kdy: 10. 05. 2017, 14:31:27 »
Podobně, proč se používá "fmap" (to je možná ještě horší, protože "type constructor" je aspoň výstižné)?
Jednoduše proto, že to má stejnou signaturu jako List.map, tak si to každej aspoň zapamatuje a je mu to intuitivně jasný ;)

Myslím, že to trochu hrotíš :)
U seznamu to je jasný, ale třeba u kontinuace?

Re:Funktory v C++
« Odpověď #47 kdy: 10. 05. 2017, 14:32:54 »
U seznamu to je jasný, ale třeba u kontinuace?
Ty bys toho taky chtěl, furt! ;)

P.S. asi radši skončíme, ne, rozjeli jsme tady solidní off-topic :)

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Funktory v C++
« Odpověď #48 kdy: 10. 05. 2017, 14:35:17 »
U seznamu to je jasný, ale třeba u kontinuace?
Ty bys toho taky chtěl, furt! ;)

P.S. asi radši skončíme, ne, rozjeli jsme tady solidní off-topic :)
Jo, jdu dělat něco smysluplného (pandas), drž mi palce, můj notebook má jen 64GB RAM  ;)

Re:Funktory v C++
« Odpověď #49 kdy: 10. 05. 2017, 14:36:53 »
smysluplného (pandas)
Pozdravuj GIL ;)


Re:Funktory v C++
« Odpověď #50 kdy: 11. 05. 2017, 14:01:36 »
Jakožto hobbík a lopata odkojená packalem a základy x86 ASM nabídnu ještě svůj příběh, jak a kde jsem potkal functor:

Před lety, už dávno po škole, jsem potkal programátorský problém natolik zábavný a složitý, že donutil ten kus hovězího co nosím v lebce, zamýšlet se nad OOP a snažit se ho ztéci (s odpuštěním) cestou C++. Průvodcem mi byl pan Bruce Eckel.
Dodnes nechápu, proč svoji dvoudílnou knihu "Thinking in C++", když už ji zveřejnil v HTML, vystavil ji v podobě dvou ZIPů, tzn. nevystavil to HTML na webu přímo, aby bylo přímo odkazovatelné, googlovatelné apod. Nevadí. O functorech resp. "function objectech" mluví cca na dvou navzájem dost vzdálených místech v druhém dílu. Najděte v ZIPu jediný HTML soubor a hledejte text "functor". Dovolím si dva citáty:

Citace
In Advanced C++: Programming Styles And Idioms (Addison Wesley, 1992), Jim Coplien coins the term functor which is an object whose sole purpose is to encapsulate a function (since “functor” has a meaning in mathematics, we shall use the more explicit term function object). The point is to decouple the choice of function to be called from the site where that function is called.

Tohle chápu tak, že functor je jenom objekt, obalující funkci, tak aby se dala předat jako parametr. Tzn. v této rovině je to jenom "zaobjektěná náhražka" klasické Céčkové syntaxe pro předání pointeru na funkci včetně úplného prototypu. A v zásadě není ani potřeba, aby ten functor obsahoval redefinici metody "operator()".

Sám Bruce Eckel raději hovoří o "function objectech" než o functorech, a jeho druhý díl o tom obsahuje samostatnou kapitolu. Podotýkám, že ta kniha je na dnešní poměry už dost stará.

Děkuji předřečníkům za vysvětlivku, že lze overloadnout operator().

Kdysi tuším na nějakých "gtree" objektech jsem se naučil, podstrčit stromu svou vlastní porovnávací funkci. Později jsem totéž hledal u std::map, a seznal jsem, že std::map toto také umí, ale vyžaduje, abych tu porovnávací funkci zabalil do "functoru". Tak jsem si našel nějaký example a levou zadní jsem to použil, aniž bych zkoumal nějaký hlubší smysl.

Dneska když tak kolem toho browsím, našel jsem nějaký example na Stack Overflow.
« Poslední změna: 11. 05. 2017, 14:03:14 od František Ryšánek »

Re:Funktory v C++
« Odpověď #51 kdy: 11. 05. 2017, 14:28:53 »

Re:Funktory v C++
« Odpověď #52 kdy: 11. 05. 2017, 14:51:14 »

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Funktory v C++
« Odpověď #53 kdy: 11. 05. 2017, 16:42:17 »
Jakožto hobbík a lopata odkojená packalem a základy x86 ASM nabídnu ještě svůj příběh, jak a kde jsem potkal functor:

Před lety, už dávno po škole, jsem potkal programátorský problém natolik zábavný a složitý, že donutil ten kus hovězího co nosím v lebce, zamýšlet se nad OOP a snažit se ho ztéci (s odpuštěním) cestou C++. Průvodcem mi byl pan Bruce Eckel.
Dodnes nechápu, proč svoji dvoudílnou knihu "Thinking in C++", když už ji zveřejnil v HTML, vystavil ji v podobě dvou ZIPů, tzn. nevystavil to HTML na webu přímo, aby bylo přímo odkazovatelné, googlovatelné apod. Nevadí. O functorech resp. "function objectech" mluví cca na dvou navzájem dost vzdálených místech v druhém dílu. Najděte v ZIPu jediný HTML soubor a hledejte text "functor". Dovolím si dva citáty:

Citace
In Advanced C++: Programming Styles And Idioms (Addison Wesley, 1992), Jim Coplien coins the term functor which is an object whose sole purpose is to encapsulate a function (since “functor” has a meaning in mathematics, we shall use the more explicit term function object). The point is to decouple the choice of function to be called from the site where that function is called.

Tohle chápu tak, že functor je jenom objekt, obalující funkci, tak aby se dala předat jako parametr. Tzn. v této rovině je to jenom "zaobjektěná náhražka" klasické Céčkové syntaxe pro předání pointeru na funkci včetně úplného prototypu. A v zásadě není ani potřeba, aby ten functor obsahoval redefinici metody "operator()".

Sám Bruce Eckel raději hovoří o "function objectech" než o functorech, a jeho druhý díl o tom obsahuje samostatnou kapitolu. Podotýkám, že ta kniha je na dnešní poměry už dost stará.

Děkuji předřečníkům za vysvětlivku, že lze overloadnout operator().

Kdysi tuším na nějakých "gtree" objektech jsem se naučil, podstrčit stromu svou vlastní porovnávací funkci. Později jsem totéž hledal u std::map, a seznal jsem, že std::map toto také umí, ale vyžaduje, abych tu porovnávací funkci zabalil do "functoru". Tak jsem si našel nějaký example a levou zadní jsem to použil, aniž bych zkoumal nějaký hlubší smysl.

Dneska když tak kolem toho browsím, našel jsem nějaký example na Stack Overflow.
Ještě jednou pro ty pomalejší - otázka není o volatelných objektech, ale o (matematických) funktorech.

UF

Re:Funktory v C++
« Odpověď #54 kdy: 11. 05. 2017, 17:26:10 »
Jakožto hobbík a lopata odkojená packalem a základy x86 ASM nabídnu ještě svůj příběh, jak a kde jsem potkal functor:

Před lety, už dávno po škole, jsem potkal programátorský problém natolik zábavný a složitý, že donutil ten kus hovězího co nosím v lebce, zamýšlet se nad OOP a snažit se ho ztéci (s odpuštěním) cestou C++. Průvodcem mi byl pan Bruce Eckel.
Dodnes nechápu, proč svoji dvoudílnou knihu "Thinking in C++", když už ji zveřejnil v HTML, vystavil ji v podobě dvou ZIPů, tzn. nevystavil to HTML na webu přímo, aby bylo přímo odkazovatelné, googlovatelné apod. Nevadí. O functorech resp. "function objectech" mluví cca na dvou navzájem dost vzdálených místech v druhém dílu. Najděte v ZIPu jediný HTML soubor a hledejte text "functor". Dovolím si dva citáty:

Citace
In Advanced C++: Programming Styles And Idioms (Addison Wesley, 1992), Jim Coplien coins the term functor which is an object whose sole purpose is to encapsulate a function (since “functor” has a meaning in mathematics, we shall use the more explicit term function object). The point is to decouple the choice of function to be called from the site where that function is called.

Tohle chápu tak, že functor je jenom objekt, obalující funkci, tak aby se dala předat jako parametr. Tzn. v této rovině je to jenom "zaobjektěná náhražka" klasické Céčkové syntaxe pro předání pointeru na funkci včetně úplného prototypu. A v zásadě není ani potřeba, aby ten functor obsahoval redefinici metody "operator()".

Sám Bruce Eckel raději hovoří o "function objectech" než o functorech, a jeho druhý díl o tom obsahuje samostatnou kapitolu. Podotýkám, že ta kniha je na dnešní poměry už dost stará.

Děkuji předřečníkům za vysvětlivku, že lze overloadnout operator().

Kdysi tuším na nějakých "gtree" objektech jsem se naučil, podstrčit stromu svou vlastní porovnávací funkci. Později jsem totéž hledal u std::map, a seznal jsem, že std::map toto také umí, ale vyžaduje, abych tu porovnávací funkci zabalil do "functoru". Tak jsem si našel nějaký example a levou zadní jsem to použil, aniž bych zkoumal nějaký hlubší smysl.

Dneska když tak kolem toho browsím, našel jsem nějaký example na Stack Overflow.
Ještě jednou pro ty pomalejší - otázka není o volatelných objektech, ale o (matematických) funktorech.

Zboji - dej jeden vo indianech...

UF

Re:Funktory v C++
« Odpověď #55 kdy: 11. 05. 2017, 18:53:52 »
...
Ještě jednou pro ty pomalejší - otázka není o volatelných objektech, ale o (matematických) funktorech.

Zboji - dej jeden vo indianech...

... to bylo mysleno vazne (jenom abys to nebral zle) ... zajima me to asi vic nez funktory a neni kde jinde se na to zeptat :)

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Funktory v C++
« Odpověď #56 kdy: 11. 05. 2017, 19:03:16 »
...
Ještě jednou pro ty pomalejší - otázka není o volatelných objektech, ale o (matematických) funktorech.

Zboji - dej jeden vo indianech...

... to bylo mysleno vazne (jenom abys to nebral zle) ... zajima me to asi vic nez funktory a neni kde jinde se na to zeptat :)
Založ téma, třeba "morfosyntax jazyků kmenů horního Peru a přilehlých oblastí a její automatická analýza metodou skrytých Markovových modelů" nebo něco podobně běžného v rámci IT, to pak bude zajímavá diskuse ;)

andy

Re:Funktory v C++
« Odpověď #57 kdy: 11. 05. 2017, 19:13:57 »
V Haskellu je ten problém, že zavádí svou terminologii. Pak je v tom ještě větší brajgl.
Citace: Mirek Prýmek
...čili Functor v Haskellu je jeden konkrétní funktor (Hask -> neco Hask).
No on problém je, že (pokud to teda dobře chápu) veškeré funktory v haskellu jsou (Hask -> Hask). Protože typ je objekt, a všechno je to v kategorii Hask. Takže je to vlastně všechno endofunktor.... což teda ve výsledku nějakému pochopení teda vůbec nepomáhá....

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Funktory v C++
« Odpověď #58 kdy: 11. 05. 2017, 19:20:22 »
V Haskellu je ten problém, že zavádí svou terminologii. Pak je v tom ještě větší brajgl.
Citace: Mirek Prýmek
...čili Functor v Haskellu je jeden konkrétní funktor (Hask -> neco Hask).
No on problém je, že (pokud to teda dobře chápu) veškeré funktory v haskellu jsou (Hask -> Hask). Protože typ je objekt, a všechno je to v kategorii Hask. Takže je to vlastně všechno endofunktor.... což teda ve výsledku nějakému pochopení teda vůbec nepomáhá....
Správně, všechno to jsou endofunktory, jinak bychom nad tím nemohli stavět monády.

UF

Re:Funktory v C++
« Odpověď #59 kdy: 11. 05. 2017, 20:14:05 »
...
Ještě jednou pro ty pomalejší - otázka není o volatelných objektech, ale o (matematických) funktorech.

Zboji - dej jeden vo indianech...

... to bylo mysleno vazne (jenom abys to nebral zle) ... zajima me to asi vic nez funktory a neni kde jinde se na to zeptat :)
Založ téma, třeba "morfosyntax jazyků kmenů horního Peru a přilehlých oblastí a její automatická analýza metodou skrytých Markovových modelů" nebo něco podobně běžného v rámci IT, to pak bude zajímavá diskuse ;)

tak z toho nebude nic - nekdo to furt maze ... skoda