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
  +
==. Este plus un nume de functie ca si f , g sau x ? ==
 
Prelude> ( \ (+) -> 1 +2 ) (-) <br>
  +
-1 <br>
 
Prelude> ( \ x -> x 1 2 ) (-) <br>
  +
-1 <br>
 
Prelude> ( \ x -> x 1 2 ) (-) <br>
  +
-1 <br>
 
Prelude> ( \ ($) x y -> y $ x ) (+) 1 2 <br>
  +
3 <br>
   
  +
==.Ce tipuri au: $ aplicat lui $, "punct" aplicat lui "punct" si alte combinatii ?==
 
Prelude> :t ($ ($) ) <br>
 
flip ($) ($) :: (((a -> b) -> a -> b) -> c) -> c <br>
 
Prelude> :t (. (.) ) <br>
 
flip (.) (.) :: (((a -> b) -> a -> c) -> d) -> (b -> c) -> d <br>
 
Prelude> :t ((.). ) <br>
 
((.) .) :: (a -> b -> c) -> a -> (d -> b) -> d -> c <br>
 
Prelude> :t ($) <br>
 
($) :: (a -> b) -> a -> b <br>
   
  +
==.Cum putem scrie numere octale ? ==
   
Prelude> ( \ (+) -> 1 +2 ) (-)
+
let (//) = (\ a b -> 8 * a + b) in 7//1 <br>
  +
57 <br>
-1
 
Prelude> ( \ x -> x 1 2 ) (-)
 
-1
 
Prelude> ( \ x -> x 1 2 ) (-)
 
-1
 
Prelude> ( \ ($) x y -> y $ x ) (+) 1 2
 
3
 
Prelude> let (+) = (*) in 2 + 3
 
6
 
Prelude>
 
   
 
let (#) = (\ a b -> 8 * a + b) in 7#1 <br>
  +
57 <br>
   
 
Nu incercati cu (*) !! <br>
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 $
 
ERROR - Syntax error in expression (unexpected symbol "$")
 
Prelude> :t ($)
 
($) :: (a -> b) -> a -> b
 
   
  +
==.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" <br>
  +
60 <br>
 
Baza8>
   
  +
==.Cum se redefineste, operatorul plus ca sa faca inmultiri ? ==
let (/) = (\ x y -> 10 * x + y) in 3/5
 
 
Baza8> let (+) = (*) in 2 + 3 <br>
35
 
  +
6 <br>
  +
----
  +
Nota: figurina de mai sus este simbolul uni 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: <br>
  +
- Happy va permite sa produceti mai multe parsere din acelasi fisier cu specificatii. <br>
  +
- Happy va da un control bun asupra arborilor generati, iar codul pe care l-aveti de scris e mai scurt. <br>
  +
[[http://www.haskell.org/happy/ Pagina originala despre Happy o gasiti aici (eng.)]]
   
  +
http://www.haskell.org/happy/Happy.gif
let (//) = (\ a b -> 8 * a + b) in 7//1
 
  +
----
57
 
 
let (#) = (\ a b -> 8 * a + b) in 7#1
 
57
 
 
Nu incercati cu (*) !!
 
 
Baza8> foldl (\ a b -> 8 * a + b) 0 $ map (\ a -> ord a - ord '0') "74"
 
60
 
Baza8>
 
   
  +
[http://www.haskell.org/haskellwiki/Ro/Haskell <= Inapoi la pagina principala Ro/Haskell ]
Baza8> let (+) = (*) in 2 + 3
 
6
 

Revision as of 16:02, 19 January 2008

Happy.gif

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

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 uni 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