Programmazione Funzionale e Parallela

Corso di Laurea in Ingegneria Informatica e Automatica - A.A. 2017-2018

HomePage | Avvisi | Diario lezioni | Materiale didattico | Esami | Forum | Login

Revision [858]

Last edited on 2017-11-04 19:20:51 by CamilDemetrescu
Additions:
==Esempi uso di metodi su liste==
Deletions:
==Esempi uso di metodi==


Revision [857]

Edited on 2017-11-04 19:20:35 by CamilDemetrescu
Additions:
Soluzione dell'esercizio 1 del [[http://wwwold.diag.uniroma1.it/~demetres/didattica/pfp/upload/esami/esonero151211/compito151211-D.pdf compito D]] dell'esonero dell'11/12/2015 (vedi pagina [[TestiCorso Materiale didattico]])
%%(java;D1.scala)
object D1 {
def alterna(i:Int)(a: =>Unit)(b: =>Unit):Unit = {
if (i == 0) ()
else {
a
b
alterna(i-1)(a)(b)
==Esercizio 4==


Revision [856]

Edited on 2017-11-04 19:18:15 by CamilDemetrescu
Additions:
Soluzione dell'esercizio 2 del [[http://wwwold.diag.uniroma1.it/~demetres/didattica/pfp/upload/esami/esonero151211/compito151211-D.pdf compito D]] dell'esonero dell'11/12/2015 (vedi pagina [[TestiCorso Materiale didattico]])
%%(java;D2.scala)
Deletions:
Soluzione dell'esercizio 2 del compito D dell'esonero dell'11/12/2015 (vedi pagina [[TestiCorso Materiale didattico]])


Revision [855]

Edited on 2017-11-04 19:17:34 by CamilDemetrescu
Additions:
==Esercizio 3==
Soluzione dell'esercizio 2 del compito D dell'esonero dell'11/12/2015 (vedi pagina [[TestiCorso Materiale didattico]])
object D2 {
def combineLists(
a:List[String],
b:List[String]):List[String] = {
(a,b) match {
case (Nil,Nil) => Nil
case (_,Nil) => a
case (Nil,_) => b
case (ha::ta, hb::tb) =>
(ha+hb)::combineLists(ta,tb)


Revision [854]

Edited on 2017-11-04 19:14:14 by CamilDemetrescu
Additions:
==Esercizio 2==
Calcolo dell'elemento più frequente in una lista:
%%(java;Freq.scala)
object Freq extends App {
val l = List(1,2,1,1,2,5,1)
def freq[T](l:List[T]):T = {
l.distinct
.map(x=>(x, l.count(_==x)))
.reduce(
(c1,c2) =>
if (c1._2 > c2._2) c1 else c2
)
._1
def freq2[T](l:List[T]):T = {
l.groupBy(x => x)
.toList
.map(c=>(c._1, c._2.size))
.reduce(
(c1,c2) =>
if (c1._2 > c2._2) c1 else c2
)
._1
println(freq(l))
println(freq2(l))


Revision [853]

Edited on 2017-11-04 19:10:05 by CamilDemetrescu
Additions:
%%(java;Alter.scala)


Revision [852]

Edited on 2017-11-04 19:09:52 by CamilDemetrescu
Additions:
==Esercizio 1==
Partizionare una lista in una coppia di liste dove la prima contiene gli elementi di indice pari e l'altra quelli di indice dispari:
object Alter extends App {
def alter[T](l:List[T]):(List[T],List[T]) = {
val k = (0 until l.size).map(i=>(i,l(i))) // inefficiente poiché l(i) richiede tempo O(n) su una lista
val a = k.filter(c=>c._1%2 == 0).map(_._2)
val b = k.filter(c=>c._1%2 != 0).map(_._2)
(a.toList,b.toList)
}
def alter2[T](l:List[T]):(List[T],List[T]) = {
val k = (0 until l.size).zip(l)
val (a,b) = k.partition(_._1%2==0) // come alternativa alle due filter
(a.map(_._2).toList, b.map(_._2).toList)
}
def alter3[T](l:List[T]):(List[T],List[T]) = { // versione ricorsiva
l match {
case Nil => (Nil,Nil)
case List(x) => (List(x),Nil)
case h::t => {
val (a,b) = alter3(t.tail)
(h::a, t.head::b)
}
}
}
val l = List("A", "B", "C", "D", "E")
val (a,b) = alter3(l)
println(a) // A, C, E
println(b) // B, D
}
==Esempi uso di metodi==


Revision [851]

Edited on 2017-11-04 19:05:34 by CamilDemetrescu
Additions:
Esempi di uso metodi ##sliding## e ##flatten##:
scala> val q = (1 to 10).toList
q: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> q.sliding(2,2)
res2: Iterator[List[Int]] = non-empty iterator
scala> q.sliding(2,2).toList
res3: List[List[Int]] = List(List(1, 2), List(3, 4), List(5, 6), List(7, 8), List(9, 10))
scala> q.sliding(2,1).toList
res4: List[List[Int]] = List(List(1, 2), List(2, 3), List(3, 4), List(4, 5), List(5, 6), List(6, 7), List(7, 8), List(8, 9), List(9, 10))
scala> q.sliding(2,3).toList
res5: List[List[Int]] = List(List(1, 2), List(4, 5), List(7, 8), List(10))
scala> q.sliding(1,1).toList
res6: List[List[Int]] = List(List(1), List(2), List(3), List(4), List(5), List(6), List(7), List(8), List(9), List(10))
scala> q.sliding(1,2).toList
res7: List[List[Int]] = List(List(1), List(3), List(5), List(7), List(9))
scala> q.sliding(1,2).toList.flatten
res8: List[Int] = List(1, 3, 5, 7, 9)
scala> q.tail.sliding(1,2).toList.flatten
res9: List[Int] = List(2, 4, 6, 8, 10)


Revision [850]

The oldest known version of this page was created on 2017-11-04 18:28:34 by CamilDemetrescu
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki
Page was generated in 0.0633 seconds