Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Scurta intrebare de Haskell  (Citit de 2205 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« : Octombrie 20, 2011, 18:43:12 »

Cum as putea sa fac in Haskell echivalentul in C++ pentru
Cod:
pair foo(int x) {
    int y = bar(x);
    return pair(y*4, y+2);
}
Pentru ca daca fac ceva de genul
Cod:
foo :: Int -> (Int, Int)
foo x = ((bar x)*4, (bar x)+2)
apelez functia bar de 2 ori, si este destul de ineficient mai ales cand programul creste.
Memorat
bogdan2412
Echipa infoarena
Nu mai tace
*****

Karma: 410
Deconectat Deconectat

Mesaje: 951



Vezi Profilul
« Răspunde #1 : Octombrie 20, 2011, 21:32:21 »

Ceva de genu asta?

Cod:
foo :: Int -> (Int, Int)
foo x = let barx = bar x
        in (barx * 4, barx + 2)

Nu ar trebui sa mearga mai repede sau mai incet insa. Din modul in care functioneaza limbajele functionale, bar x ar trebui sa intoarca intotdeauna aceeasi valoare, deci compilatorul ar trebui sa recunoasca asta si sa nu apeleze de 2 ori bar.
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #2 : Octombrie 21, 2011, 00:59:56 »

Ah da, ai dreptate, mersi, am uitat de let Smile
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #3 : Octombrie 21, 2011, 09:10:53 »

Te-ai apucat de Haskell Smile) ?
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #4 : Octombrie 21, 2011, 13:49:03 »

Imi trebuie pentru scoala Smile E destul de interesant desi are o sintaxa cam dubioasa.
Memorat
gabipurcaru
Strain


Karma: 13
Deconectat Deconectat

Mesaje: 24



Vezi Profilul
« Răspunde #5 : Octombrie 27, 2011, 05:23:45 »

apelez functia bar de 2 ori, si este destul de ineficient mai ales cand programul creste.

ineficient din ce punct de vedere? din cate stiu eu, sintaxa Haskell e asa ciudata doar pentru ca functiile sunt pure, deci rezultatul lor poate (si din cate stiu e) cachuit. (desi e totusi ineficient din punct de vedere al structurii codului)
Memorat
MciprianM
Nu mai tace
*****

Karma: 87
Deconectat Deconectat

Mesaje: 324



Vezi Profilul
« Răspunde #6 : Octombrie 30, 2011, 19:02:57 »

Cum as putea sa fac in Haskell echivalentul in C++ pentru
Cod:
pair foo(int x) {
    int y = bar(x);
    return pair(y*4, y+2);
}
Pentru ca daca fac ceva de genul
Cod:
foo :: Int -> (Int, Int)
foo x = ((bar x)*4, (bar x)+2)
apelez functia bar de 2 ori, si este destul de ineficient mai ales cand programul creste.

Poti sa folosesti o functie auxiliara(acum invat pentru partial  Very Happy):
Cod:
foo :: Int -> (Int, Int)
foo2 :: Int -> (Int, Int)
foo2 x = (x*4, x+2)
foo x = foo2 bar x
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines