Difference between revisions of "Programati si zambiti !"

From HaskellWiki
Jump to navigation Jump to search
Line 1: Line 1:
 
http://www.haskell.org/happy/Happy.gif
 
http://www.haskell.org/happy/Happy.gif
==. Este plus un nume de functie ca si f , g sau x ? ==
+
==. Este plus un nume de functie ca si f , g sau x ? Dar $ ?==
 
Prelude> ( \ (+) -> 1 +2 ) (-) <br>
 
Prelude> ( \ (+) -> 1 +2 ) (-) <br>
 
-1 <br>
 
-1 <br>

Revision as of 16:03, 19 January 2008

Happy.gif

. Este plus un nume de functie ca si f , g sau x ? Dar $ ?

Prelude> ( \ (+) -> 1 +2 ) (-)
-1
Prelude> ( \ x -> x 1 2 ) (-)
-1
Prelude> ( \ x -> x 1 2 ) (-)
-1
Prelude> ( \ ($) x y -> y $ x ) (+) 1 2
3

.Ce tipuri au: $ aplicat lui $, "punct" aplicat lui "punct" si alte combinatii ?

Prelude> :t ($ ($) )
flip ($) ($) :: (((a -> b) -> a -> b) -> c) -> c
Prelude> :t (. (.) )
flip (.) (.) :: (((a -> b) -> a -> c) -> d) -> (b -> c) -> d
Prelude> :t ((.). )
((.) .) :: (a -> b -> c) -> a -> (d -> b) -> d -> c
Prelude> :t ($)
($) :: (a -> b) -> a -> b

.Cum putem scrie numere octale ?

let (//) = (\ a b -> 8 * a + b) in 7//1
57

let (#) = (\ a b -> 8 * a + b) in 7#1
57

Nu incercati cu (*) !!

.Cum transformam un string in numar octal in maniera traditionala ?

Baza8> foldl (\ a b -> 8 * a + b) 0 $ map (\ a -> ord a - ord '0') "74"
60
Baza8>

.Cum se redefineste, operatorul plus ca sa faca inmultiri ?

Baza8> let (+) = (*) in 2 + 3
6


Nota: figurina de mai sus este simbolul unui generator de parsere care produce surse Haskell, numit Happy. Il puteti privi pe Happy ca pe un fel de Yacc sau Bison care produce surse in Haskell. Sunt totusi unele deosebiri intre Bison (sau Yacc ) si Happy. De fapt sunt chiar imbunatatiri:
- Happy va permite sa produceti mai multe parsere din acelasi fisier cu specificatii.
- Happy va da un control bun asupra arborilor generati, iar codul pe care l-aveti de scris e mai scurt.
[Pagina originala despre Happy o gasiti aici (eng.)]

Happy.gif


<= Inapoi la pagina principala Ro/Haskell