Dědičnost dnes

gll

Re:Dědičnost dnes
« Odpověď #960 kdy: 03. 02. 2017, 20:22:13 »
oni tvrdí, že mé programy budou stejně rychlé i když ty mutable části nepoužiji.
To je fakt marný...

Můžeš mi nějak polopaticky vysvětlit, z jakého důvodu potřebuješ tak zarputile dokazovat, že FP je pomalejší?

(a pak že jí mám nějaké "náboženství", ufff...)

Protože je to pravda. Já jsem s tím nezačal. Jen jsem reagoval na Zbojovo nepravdivé tvrzení.


Re:Dědičnost dnes
« Odpověď #961 kdy: 03. 02. 2017, 20:24:25 »
Protože je to pravda. Já jsem s tím nezačal. Jen jsem reagoval na Zbojovo nepravdivé tvrzení.
A tohle jsi přehlídl, nebo...?

https://forum.root.cz/index.php?topic=14610.msg199308#msg199308

gll

Re:Dědičnost dnes
« Odpověď #962 kdy: 03. 02. 2017, 20:46:44 »
Protože je to pravda. Já jsem s tím nezačal. Jen jsem reagoval na Zbojovo nepravdivé tvrzení.
A tohle jsi přehlídl, nebo...?

https://forum.root.cz/index.php?topic=14610.msg199308#msg199308

Pokud musí být ta paměť imutabilní, tak stále neumožňuje efektivní implementaci některých algoritmů, ale je to menší omezení než lepení všeho z consů.

Zboj tvrdil něco jiného.

Re:Dědičnost dnes
« Odpověď #963 kdy: 03. 02. 2017, 20:56:48 »
Pokud musí být ta paměť imutabilní, tak stále neumožňuje efektivní implementaci některých algoritmů, ale je to menší omezení než lepení všeho z consů.
Ty seš prostě neuvěřitelně zaťatej,to snad není možný.

Místo
Kód: [Vybrat]
a = 1
a = a+1
a = a+2
může prostě být (aspoň pro účely teorie složitosti)
Kód: [Vybrat]
(\x -> x + 2) . (\x -> x + 1) $ 1
a přeložit se to může do úplně stejnýho strojovýho kódu. Co je na tom tak těžký pochopit?

gll

Re:Dědičnost dnes
« Odpověď #964 kdy: 03. 02. 2017, 21:45:57 »
Pokud musí být ta paměť imutabilní, tak stále neumožňuje efektivní implementaci některých algoritmů, ale je to menší omezení než lepení všeho z consů.
Ty seš prostě neuvěřitelně zaťatej,to snad není možný.

Místo
Kód: [Vybrat]
a = 1
a = a+1
a = a+2
může prostě být (aspoň pro účely teorie složitosti)
Kód: [Vybrat]
(\x -> x + 2) . (\x -> x + 1) $ 1
a přeložit se to může do úplně stejnýho strojovýho kódu. Co je na tom tak těžký pochopit?

Já myslel mutable pole.


Re:Dědičnost dnes
« Odpověď #965 kdy: 03. 02. 2017, 21:53:21 »
Já myslel mutable pole.
No a s ním to bude fungovat na vlas stejně:

Místo
Kód: [Vybrat]
a = ...
a[1] = 1
a[2] = 2
bude
Kód: [Vybrat]
(\x -> Array.put(x,2,2)) . (\x -> Array.put(x,1,1)) $ ...
("Array.put" jsem si vymyslel, nevím, jestli něco takovýho v Haskellu je)

gll

Re:Dědičnost dnes
« Odpověď #966 kdy: 03. 02. 2017, 22:20:26 »
Já myslel mutable pole.
No a s ním to bude fungovat na vlas stejně:

Místo
Kód: [Vybrat]
a = ...
a[1] = 1
a[2] = 2
bude
Kód: [Vybrat]
(\x -> Array.put(x,2,2)) . (\x -> Array.put(x,1,1)) $ ...
("Array.put" jsem si vymyslel, nevím, jestli něco takovýho v Haskellu je)

Kód: [Vybrat]
(\x -> Array.put(x,2,2) ++ x)

tohle má fungovat jak?

Re:Dědičnost dnes
« Odpověď #967 kdy: 03. 02. 2017, 22:22:41 »
tohle má fungovat jak?
Zeleně.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Dědičnost dnes
« Odpověď #968 kdy: 04. 02. 2017, 00:29:08 »
tohle má fungovat jak?
Zeleně.
Celá ta diskuse plyne z toho, že někdo si naivně myslí, že když v FP napíše třeba funkci pro výpočet Fibbonaciho čísel přesně podle definice, tak časová složitost bude jako kdyby tu funkci stejně zapsal v Javě a spustil. A veškeré argumenty jak do dubu...

gll

Re:Dědičnost dnes
« Odpověď #969 kdy: 04. 02. 2017, 00:35:58 »
tohle má fungovat jak?
Zeleně.
Celá ta diskuse plyne z toho, že někdo si naivně myslí, že když v FP napíše třeba funkci pro výpočet Fibbonaciho čísel přesně podle definice, tak časová složitost bude jako kdyby tu funkci stejně zapsal v Javě a spustil. A veškeré argumenty jak do dubu...

https://wiki.haskell.org/The_Fibonacci_sequence#Naive_definition

"This implementation requires O(fib n) additions."

Honza

Re:Dědičnost dnes
« Odpověď #970 kdy: 04. 02. 2017, 00:45:24 »
tohle má fungovat jak?
Zeleně.
Celá ta diskuse plyne z toho, že někdo si naivně myslí, že když v FP napíše třeba funkci pro výpočet Fibbonaciho čísel přesně podle definice, tak časová složitost bude jako kdyby tu funkci stejně zapsal v Javě a spustil. A veškeré argumenty jak do dubu...
Asymptotická časová složitost algoritmu přece nezáleží na tom, v jakém programovacím jazyce ho napíšeme, nebo jo?
Můžeme to udělat pomocí dynamického programování, pomocí cyklu nebo rekurze, ale to pak už není tentýž algoritmus.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Dědičnost dnes
« Odpověď #971 kdy: 04. 02. 2017, 00:59:15 »
tohle má fungovat jak?
Zeleně.
Celá ta diskuse plyne z toho, že někdo si naivně myslí, že když v FP napíše třeba funkci pro výpočet Fibbonaciho čísel přesně podle definice, tak časová složitost bude jako kdyby tu funkci stejně zapsal v Javě a spustil. A veškeré argumenty jak do dubu...
Asymptotická časová složitost algoritmu přece nezáleží na tom, v jakém programovacím jazyce ho napíšeme, nebo jo?
Můžeme to udělat pomocí dynamického programování, pomocí cyklu nebo rekurze, ale to pak už není tentýž algoritmus.
Ne, nezáleží. Vlastně jde jen o to, že v FP se nezapisují algoritmy, proto se ostatně mluví o deklarativním programování.

gll

Re:Dědičnost dnes
« Odpověď #972 kdy: 04. 02. 2017, 01:13:02 »
Asymptotická časová složitost algoritmu přece nezáleží na tom, v jakém programovacím jazyce ho napíšeme, nebo jo?
Můžeme to udělat pomocí dynamického programování, pomocí cyklu nebo rekurze, ale to pak už není tentýž algoritmus.

zboj asi narážel na rekurzivní definici sekvence
 
Kód: [Vybrat]
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

zbojovi bych doporučil prostudovat si jak to funguje, aby v tom nehledal umělou inteligenci

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Dědičnost dnes
« Odpověď #973 kdy: 04. 02. 2017, 07:03:28 »
Stejne moc nechapu, co tu resite. Kdyz potrebuju v Jave neco fakt rychle spocitat, no tak se poohlednu po asm/C/C++ knihovne, ktera ma bindy pro Javu. Se podivejte na ten Python, pomaly az by jeden brecel, presto se v tom bezne lepi vedecke vypocty - proste se pouzije knihovna, ktera je rychla. Podobne s Haskellem (ten je v casti vypoctu stejne rychly jako Java; predpokladam, ze muze byt v nemalo realnych problemech i podstatne rychlejsi nez Java/C++/C protoze lazy) - proste kdyz chci mega-uber-efektivni implementaci razeni/hledani cesty v grafy/vypoctu s maticemi/identifikovani trola, tak sahnu po nejake knihovne, ktera se navenek tvari funkcionalne a uvnitr muze byt jakakoliv, je mi to putna, protoze zvenci je FP, vic programatora nezajima - jeho program je funkcionalni.

Re:Dědičnost dnes
« Odpověď #974 kdy: 04. 02. 2017, 09:19:03 »
Asymptotická časová složitost algoritmu přece nezáleží na tom, v jakém programovacím jazyce ho napíšeme, nebo jo?
Můžeme to udělat pomocí dynamického programování, pomocí cyklu nebo rekurze, ale to pak už není tentýž algoritmus.
gll pořád není schopnej pochopit tohle:

Myslím, že se tady hlavně motají dohromady dvě věci: teoretická možnost výpočtu ve stejném množství kroků a praktický způsob, jak se v jednom nebo druhém případě reálně programuje a jaký je pak výkon toho kódu na reálném stroji.

Pokud programuju tak, jak je v FP zvykem, tak můžu dostat míň efektivní program (praktická efektivita). Ale neznám žádný argument, proč by z principu nešlo v FP "simulovat" ne-FP výpočet v přesně stejném počtu kroků (teoretická efektivita).

gll vehementně tvrdí, že "to je pravda". No tak může podat formální důkaz, místo toho, abysme si tady hráli na kočku a myš...