Programati si zambiti !

(Difference between revisions)

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