Documente Academic
Documente Profesional
Documente Cultură
Intrare/Ies, ire
, a
Traian Florin S, erbanut
FMI, UNIBUC
Departamentul de Informatica,
traian.serbanuta@fmi.unibuc.ro
20 noiembrie 2015
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
1 / 32
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
2 / 32
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
3 / 32
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
4 / 32
Care e legatura
dintre intent, ie s, i act, iune, dintre percept, ie s, i nt, elegere?
Idealism (Platon)
Dualism (Descartes)
Fizicalism (materialism)
Neutral Monism
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
5 / 32
Comenzi n Haskell
Comenzi n Haskell
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
6 / 32
Comenzi n Haskell
Exemplu
putChar
va afis, a un semn de
rerpezinta o comanda care, daca va fi executata,
exclamare.
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
7 / 32
Comenzi n Haskell
Exemplu
putChar ? >> putChar
va afis, a un semn de
rerpezinta o comanda care, daca va fi executata,
ntrebare urmat de un semn de exclamare .
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
8 / 32
Comenzi n Haskell
done : : IO ( )
nu va face nimic.
done rerpezinta o comanda care, daca va fi executata,
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
9 / 32
Comenzi n Haskell
putStr : : S t r i n g > IO ( )
putStr [ ]
= done
putStr ( x : xs ) = putChar x >> putStr xs
Exemplu
putStr " ? ! " == putChar ? >> ( putChar
! >> done )
va afis, a un semn de
rerpezinta o comanda care, daca va fi executata,
ntrebare urmat de un semn de exclamare.
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
10 / 32
Comenzi n Haskell
putStr
putStr
: : S t r i n g > IO ( )
= f o l d r ( > >) done . map putChar
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
11 / 32
Comenzi n Haskell
m >> done
done >> m
(m >> n ) >> o
,a (UNIBUC)
Traian Florin S, erbanut
=
=
=
m
m
m >> ( n >> o )
PDIntrare/Ies, ire
20 noiembrie 2015
12 / 32
Comenzi n Haskell
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
13 / 32
Comenzi n Haskell
Rulare cu compilare:
08 i o $ ghc S c r i e L i n i e . hs main i s S c r i e L i n i e . s t a r t o s c r i e
[ 1 of 1 ] Compiling S c r i e L i n i e ( S c r i e L i n i e . hs , S c r i e L i n i e . o )
Linking scrie . . .
08 i o $ . / s c r i e
?!
08 i o $
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
14 / 32
Validitatea rat,ionamentelor
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
15 / 32
Validitatea rat,ionamentelor
Program 1
int main() { cout << "HA!"; cout << "HA!"; }
Program 2
void dup(auto& x) { x ; x; }
int main() { dup(cout << "HA!"); }
Program 3
void dup(auto x) { x() ; x (); }
int main() { dup( []() { cout << "HA!"; } ); }
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
16 / 32
Validitatea rat,ionamentelor
Expresii
(1+2) * (1+2)
s, i se evalueaza amndoua la 9
Comenzi
putStr "HA! " >> putStr "HA! "
este echivalenta cu
l e t m = putStr "HA! " i n m >> m
PDIntrare/Ies, ire
20 noiembrie 2015
17 / 32
Comenzi cu valori
Comenzi cu valori
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
18 / 32
Comenzi cu valori
Comenzi cu valori
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
19 / 32
Comenzi cu valori
Cites, te un caracter!
getChar : : IO Char
s, irul ramas
de intrare "bc"
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
20 / 32
Comenzi cu valori
sa faci nimic!
Produ o valoare fara
arie
Din pal
r e t u r n : : a > IO a
Asemanatoar
cu done, nu face nimic, dar produce o valoare.
Exemplu
return " "
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
21 / 32
Comenzi cu valori
Exemplu
getChar >>= \ x > putChar ( toUpper x )
s, irul ramas
de intrare "bc"
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
22 / 32
Comenzi cu valori
PDIntrare/Ies, ire
20 noiembrie 2015
23 / 32
Comenzi cu valori
Cites, te o linie!
getLine : : IO S t r i n g
getLine = getChar >>= \ x >
i f x == \ n then
return [ ]
else
getLine >>= \ xs >
r e t u r n ( x : xs )
Exemplu
Dat fiind s, irul de intrare "abc\ndef", getLine produce s, irul "abc" s, i s, irul
ramas
de intrare e "def"
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
24 / 32
Comenzi cu valori
: : IO ( )
= return ( )
: : IO ( ) > IO ( ) > IO ( )
= m >>= \ ( ) > n
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
25 / 32
Comenzi cu valori
Operatorul de legare
m >>= \ x > n
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
26 / 32
Comenzi cu valori
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
27 / 32
Comenzi cu valori
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
28 / 32
Comenzi cu valori
Test
$ runghc Echo . hs
One l i n e
ONE LINE
And , a n o t h e r l i n e !
AND, ANOTHER LINE !
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
28 / 32
Notat,ia do
Notat, ia do
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
29 / 32
Notat,ia do
Echivalent cu:
getLine : : IO S t r i n g
getLine = do {
x < getChar ;
i f x == \ n then
return [ ]
else do {
xs < getLine ;
r e t u r n ( x : xs )
}
}
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
30 / 32
Notat,ia do
Echo n notat, ia do
echo : : IO ( )
echo = getLine >>= \ l i n e >
i f l i n e == " " then
return ( )
else
putStrLn (map toUpper l i n e ) >>
echo
Echivalent cu
echo : : IO ( )
echo = do {
l i n e < getLine ;
i f l i n e == " " then
return ( )
else do {
putStrLn (map toUpper l i n e ) ;
echo
}
}
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
31 / 32
Notat,ia do
Notat, ia do n general
Fiecare linie x < e; ... devine e >>= \x > ...
Fiecare linie e; ... devine e >> ...
De exemplu
do { x1 < e1 ;
x2 < e2 ;
e3 ;
x4 < e4 ;
e5 ;
e6 }
e echivalent cu
e1
e2
e3
e4
e5
e6
>>= \ x1 >
>>= \ x2 >
>>
>>= \ x4 >
>>
,a (UNIBUC)
Traian Florin S, erbanut
PDIntrare/Ies, ire
20 noiembrie 2015
32 / 32