Personal tools

Programati si zambiti !

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
m
Line 29: Line 29:
   
 
Daca definiti (#) = (\ a b -> 8 * a + b) puteti scrie numerele octale in maniera : 3#4#7 <br>
 
Daca definiti (#) = (\ a b -> 8 * a + b) puteti scrie numerele octale in maniera : 3#4#7 <br>
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. <br> <br>
+
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. <br> <br>
   
 
==.Cum transformam un string in numar octal in maniera traditionala ? ==
 
==.Cum transformam un string in numar octal in maniera traditionala ? ==

Revision as of 16:11, 19 January 2008

Happy.gif

Contents

1 . 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

2 .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

3 .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.

4 .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>

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

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

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


<= Inapoi la pagina principala Ro/Haskell