Programmazione Funzionale - Esercizi sulle funzioni ricorsive

Transcript

Programmazione Funzionale - Esercizi sulle funzioni ricorsive
Programmazione Funzionale
Esercizi sulle funzioni ricorsive
Davide Mottin - Themis Palpanas
March 19, 2014
1/10
Operazioni su stringhe
Funzioni e operazioni
Conta occorrenze
Serie armonica
Sommario
2/10
Una utile funzione
(∗
C o n v e r t e un c a r a t t e r e i n una s t r i n g a
∗)
l e t s t r i n g o f c h a r c = S t r i n g . make 1 c ; ;
Operazioni su stringhe
3/10
Sottostringhe
Costruire una funzione che prenda in input una stringa e due interi
inizio e fine e restituisca la sottostringa che parte da inizio
(incluso) e termina in fine (escluso).
Operazioni su stringhe
4/10
Sottostringhe - soluzione
(∗
R e s t i t u i s c e l a s o t t r o s t r i n g a d i s t r i n g da
posizione s ( inclusa ) a posizione e ( esclusa )
∗)
l e t rec s u b s t r s t r i n g s e =
i f s = e then ””
else
( string of char string . [ s ])ˆ
( s u b s t r s t r i n g ( s +1) e ) ; ;
Operazioni su stringhe
5/10
Conta occorrenze
Costruire una funzione che conti le occorrenze di un determinato
carattere in una stringa.
Operazioni su stringhe
6/10
Conta occorrenze - Soluzione
(∗
Conta i l numero d i o c c o r r e n z e d i c h a r i n s t r i n g
∗)
l e t rec countchar s t r i n g char =
i f s t r i n g = ”” t h e n 0
else
i f s t r i n g . [ 0 ] = char then
1 + ( countchar ( substr s t r i n g 1
( String . length s t r i n g )) char )
else
0 + ( countchar ( substr s t r i n g 1
( String . length s t r i n g )) char ) ; ;
E se volessimo costruire una funzione che presi in input due
caratteri e una stringa conti le occorrenze di entrambi e le
restituisca in una coppia?
Operazioni su stringhe
7/10
Conta coppie di occorrenze - Soluzione
l e t rec count two a b s =
i f s = ”” then ( 0 , 0 )
else
let ( c a , c b ) =
count two a b ( s u b s t r s 1 ( S t r i n g . length s )) in
i f s . [ 0 ] = a then ( c a + 1 , c b )
e l s e i f s . [ 0 ] = b then ( c a , c b + 1)
else (c a , c b );;
Operazioni su stringhe
8/10
Serie armonica
Costruire una funzione che calcoli la serie armonica fino ad un
determinato numero. La serie armonica è cosı̀ definita
n
X
1
i=1
Serie armonica
i
9/10
Serie armonica - Soluzione
(∗
C a l c o l a l a s e r i e armonica f i n o a c
∗)
l e t rec armonic c =
i f c < 1 then 0.
e l s e 1 . 0 / . ( f l o a t o f i n t c ) +. a r m o n i c ( c − 1 ) ; ;
E se volessimo restituire la stringa con tutta la serie fino ad un
numero supponendo di avere una variabile nella funzione che
memorizza il valore della serie fino a quel punto?
Serie armonica
10/10