Haskell, ett ofog eller inte?

Avdelningen för programmering, nätverk samt alternativa OS.
User avatar
gottegrisen
Posts: 221
Joined: 2002-03-11 12:47:17
Location: Mölnlycke

Post by gottegrisen »

Visste du något om fältet skulle du förstå att om kontinuationen när rekursionen sker är ekvivalent med identitetsfunktionen kan allt stacktrams hoppas över.
Kan?? Varför lita på att andra har gjort lösningen när man kan göra den bästa själv?
Vilken nybörjare som helst kan se att den rekursiva funktionen inte har någon större algoritmskomplexitet. Det här är fortfarande ett slag mellan funktionella språk och iterativa språk. Jag gjorde samma sak med rekursion i ett funktionellt språk och med iteration i ett imperativt språk och visade att det funktionella var snabbare.
Ehh? Du menar att rekursion/funktionellaspråk är snabbare/bättre än iteration/imperativa för att ditt program exekverar snabbare? Du har inte funderat på skillnader i roten functionen eller i utmatingen? Antagligen vet du redan detta och är bara ute och fiskar, annars så är du dummare än vad jag trodde...

Det är ju ganska uppenbart att räknar man bara på komplexiteten så är det ju samma, men antalet instruktioner kommer inte alltid stämma överens.
Med outputen direkt i loopen tar programmet 5.1 sekunder.
Mer saker du glömt kanske?

Förövrigt tycker jag att dina kodexempel är bra ur den synvinklen hur fula och oläsbara funktionella språk är:)
User avatar
phubuh
Posts: 198
Joined: 2002-10-02 19:04:05

Post by phubuh »

gottegrisen wrote: Ser inte ut som C det där...
Tar den rekursiva lösningen 25 % av tiden av den den itertiva, har jag tre möjliga alternativ:
*Sunkigt program
*Sunkigt språk
*Sunkig test
Värsta fall en kombination...
Jag har förlorat allt hopp om en vettig diskussion med dig.

Min poäng är att det är helt värdelöst att påstå att iteration skulle vara "snabbare" än rekursion. Det beror bara på din algoritm, optimering, och vilket språk du använder. I O'Caml, vilket för övrigt är ett otroligt bra programmeringsspråk, så råkar tail-recursion vara snabbare än iteration. I C och andra imperativa språk är iteration snabbare.

Jag är inte emot iteration; det är ofta den snyggaste lösningen, som när du vill iterera genom en sträng, till exempel. Men rekursion kommer mer naturligt till mig, vilket självklart är helt subjektivt. Det är ditt problem om du bestämmer dig för att göra en iterativ sökning i ett binärt träd -- jag kommer att fortsätta att skriva läsbar och buggfri kod i stället för att undvika paradigmer av religiösa skäl.
User avatar
phubuh
Posts: 198
Joined: 2002-10-02 19:04:05

Post by phubuh »


Kan?? Varför lita på att andra har gjort lösningen när man kan göra den bästa själv?
Uppenbarligen inte -- den tail-rekursiva funktionen var snabbare än den iterativa, remember?
Ehh? Du menar att rekursion/funktionellaspråk är snabbare/bättre än iteration/imperativa för att ditt program exekverar snabbare? Du har inte funderat på skillnader i roten functionen eller i utmatingen? Antagligen vet du redan detta och är bara ute och fiskar, annars så är du dummare än vad jag trodde...
Nej, det menar jag inte. Du menar däremot att iteration är snabbare, av någon anledning som jag inte har hört än.
Det är ju ganska uppenbart att räknar man bara på komplexiteten så är det ju samma, men antalet instruktioner kommer inte alltid stämma överens.
Det finns ingen anledning att den iterativa versionen skulle ha färre instruktioner än den rekursiva. Min rec_fib tar färre instruktioner än rec_iter.
Mer saker du glömt kanske?
Jag inbjuder dig att skriva en bättre version.
Förövrigt tycker jag att dina kodexempel är bra ur den synvinklen hur fula och oläsbara funktionella språk är:)
Latin är fult och oläsbart. Jag har aldrig studerat det och jag vet egentligen ingenting om det, men jag kan då fan inte läsa det.
User avatar
gottegrisen
Posts: 221
Joined: 2002-03-11 12:47:17
Location: Mölnlycke

Post by gottegrisen »

phubuh wrote:
Jag har förlorat allt hopp om en vettig diskussion med dig.
Du menar att du tycker den roligare var bättre förut när det var mindre fakta och mer latin?
phubuh wrote: Min poäng är att det är helt värdelöst att påstå att iteration skulle vara "snabbare" än rekursion. Det beror bara på din algoritm, optimering, och vilket språk du använder. I O'Caml, vilket för övrigt är ett otroligt bra programmeringsspråk, så råkar tail-recursion vara snabbare än iteration.
Nej det är inte värdelöst, det är sant. Rekursion suger i jämförelse med iteration om man ser till optimering...
phubuh wrote: I C och andra imperativa språk är iteration snabbare.
Tack! Det är riktigt, iteration är snabbare(se länk nedan).

Rekursion i "Ditt" språk kommer garanterat inte ha färre instruktioner än iteration än C, garanterat tvärt om. Hade det inte varit för min totala ångest över funktionella språk så hade jag kanske satt mig in i koden men när den ser ut som den gör orkar jag inte. Jämförde lite på nätet och antagligen vill du glänsa lite med att skriva fib extra oläsligt.

Och efter vad du visat prov på tidigare misstänker starkt att du har skrivit fel i programmet, därav dit klena resultat med tiderna.

Jag sitter inte dagligen och dissasmblerar kod men det händer ganska ofta. Jag har varken tid eller ork att göra det på fritiden också så jag letade upp ett exempel på en kille som har jämfört ditt kära funktionella språk med i C. Du kan ju även notera hans något mer läsbara variant av rec fib.

http://opensource.lineo.com/~beppu/prose/ocaml.html

Du kan ju trösta dig med att killen iaf tyckte att ocalm verkade bra...
User avatar
phubuh
Posts: 198
Joined: 2002-10-02 19:04:05

Post by phubuh »

gottegrisen wrote: Rekursion i "Ditt" språk kommer garanterat inte ha färre instruktioner än iteration än C, garanterat tvärt om. Hade det inte varit för min totala ångest över funktionella språk så hade jag kanske satt mig in i koden men när den ser ut som den gör orkar jag inte. Jämförde lite på nätet och antagligen vill du glänsa lite med att skriva fib extra oläsligt.
Jag provade, och en iterativ version i C var mindre än en rekursiv i O'Caml. Varför spelar det någon roll?

Jag skrev fib tail-rekursivt, men jag tänker inte ens låtsas som om du förstår vad det betyder.
Jag sitter inte dagligen och dissasmblerar kod men det händer ganska ofta. Jag har varken tid eller ork att göra det på fritiden också så jag letade upp ett exempel på en kille som har jämfört ditt kära funktionella språk med i C. Du kan ju även notera hans något mer läsbara variant av rec fib.
Han jämförde en icke-tail-rekursiv funktion i O'Caml och en iterativ i C och C-versionen var snabbare? Jag är inte speciellt förvånad. C är ett snabbare språk än O'Caml och hans rekursion är taskig.
User avatar
gottegrisen
Posts: 221
Joined: 2002-03-11 12:47:17
Location: Mölnlycke

Post by gottegrisen »

phubuh wrote:
gottegrisen wrote: Jag skrev fib tail-rekursivt, men jag tänker inte ens låtsas som om du förstår vad det betyder.
Du kan ju låtsas att jag förstår din funktion då:)
Annars kan du ju låtsas att du har gjort dina exempel rätt, för det är uppenbart något har du har gjort fel. Vad det gäller tail rekursion så var nog din lösing (om den nu var korrekt) den mest oläsliga variant jag sett.
Han jämförde en icke-tail-rekursiv funktion i O'Caml och en iterativ i C och C-versionen var snabbare? Jag är inte speciellt förvånad. C är ett snabbare språk än O'Caml och hans rekursion är taskig.
Jag tror inte jag behöver göra någon mer reklam för C, du fixar ju biffen själv :)
Post Reply