Scala, lab. 3

Transkrypt

Scala, lab. 3
Języki i środowiska przetwarzania danych rozproszonych
(Scala, lab. 3)
1. (1 pkt)
Na podstawie definicji funkcji map dla typu List zdefiniuj metody map i filter
wykorzystując implicit conversions i pattern matching. W nazwach tych metod zastosuj
do odróżnienia jakiś prefiks lub sufiks (np. my).
def jispdr_map[S, R](src : List[S])( f : S => R ) : List[R] = {
src match {
case head :: tail => f(head) :: jispdr_map(tail)(f)
case _ => Nil
}
}
2. (1 pkt)
Zdefiniuj kolejne metody dla typu list: forall i exists.
3. (2 pkt)
Wykorzystując currying uogólnij opracowane metody (map, filter, forall i exists)
wprowadzając taką metodę processList, która przyjmuje dwie dodatkowe funkcje jako
parametry, i umożliwia zdefiniowanie wymienionych metod.
Pierwsza funkcja dodatkowa określa rezultat cząstkowy na podstawie elementu
kolekcji oraz jego wartości przekształconej poprzez główną funkcję metody
(przekształcenie dla map lub predykat dla pozostałych).
Druga funkcja dodatkowa formuje końcowy rezultat na podstawie rezultatów
cząstkowych zwracanych przez pierwszą funkcję dodatkową.
Na koniec zdefiniuj funkcje map, filter, forall i exists wykorzystując funkcję
processList.
4. *(22 pkt-y wykładowe - wyłącznie dla dwóch pierwszych rozwiązań u;)
Uogólnij wybraną (albo lepiej: wybrane) opracowaną powyżej metodę tak aby
działała dla trzech wybranych różnych typów kolekcji. Zwróć uwagę, że w Scali
operacje takie jak map nie zmieniają typu kolekcji.
Źródła inspiracji:
https://github.com/scala/scala/blob/2.12.x/src/library/scala/collection/TraversableLike.
scala

Podobne dokumenty