infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Andrei Misarca din Octombrie 20, 2011, 18:43:12



Titlul: Scurta intrebare de Haskell
Scris de: Andrei Misarca din 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.


Titlul: Răspuns: Scurta intrebare de Haskell
Scris de: Bogdan-Cristian Tataroiu din 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.


Titlul: Răspuns: Scurta intrebare de Haskell
Scris de: Andrei Misarca din Octombrie 21, 2011, 00:59:56
Ah da, ai dreptate, mersi, am uitat de let :)


Titlul: Răspuns: Scurta intrebare de Haskell
Scris de: Pripoae Teodor Anton din Octombrie 21, 2011, 09:10:53
Te-ai apucat de Haskell :)) ?


Titlul: Răspuns: Scurta intrebare de Haskell
Scris de: Andrei Misarca din Octombrie 21, 2011, 13:49:03
Imi trebuie pentru scoala :) E destul de interesant desi are o sintaxa cam dubioasa.


Titlul: Răspuns: Scurta intrebare de Haskell
Scris de: Gabi Purcaru din 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)


Titlul: Răspuns: Scurta intrebare de Haskell
Scris de: MciprianM din 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  :D):
Cod:
foo :: Int -> (Int, Int)
foo2 :: Int -> (Int, Int)
foo2 x = (x*4, x+2)
foo x = foo2 bar x