Programati si zambiti !

From HaskellWiki
Revision as of 14:35, 10 February 2008 by Ha$kell (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


Happy.gif Click pe show pentru a expanda cuprinsul.
Operatia inversa se face cu click pe hide.

. 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

Daca definiti (#) = (\ a b -> 8 * a + b) puteti scrie numerele octale in maniera : 3#4#7
Nu incercati cu (*) in loc de (#) deoarece * apare in definitie cu vechiul sau sens, deci nu trebuie redefinit. Incercarea de a evalua let (*) = (\ a b -> 8 * a + b) in 7#1 a reusit sa dea interpretorul Hugs peste cap.

.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

. Cum transform o cifra in caracterul corespunzator ?

Baza8> head $ show 1
'1'
Baza8>


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


Pagina indexata la indexul Categories:Ro


<= Inapoi la pagina principala Ro/Haskell.

<- Inapoi la inceputul paginii 'Intrebarile incepatorului Ro/Haskell'.