O documento apresenta técnicas de programação funcional em F# e Scala, como funções de alta ordem, imutabilidade, pattern matching e avaliação preguiçosa. Estas técnicas permitem maior confiabilidade no código e facilitam a manipulação de listas e estruturas de dados de forma funcional.
25. Recursão em listas
let rec reverse lista =
match lista with
| head :: tail -> (reverse tail) @ [head]
| [] -> []
def reverse[T](list: List[T]): List[T] = list match {
case head :: tail => reverse(tail) ++ List(head)
case Nil => Nil
}
29. Pattern matching
match coisa with
| 1 | 3 -> …
| head :: tail -> …
| [] -> …
| _ -> …
lista match {
case 1 => …
case head :: tail => …
case Nil => …
case _ => …
2
9
30. E se eu iterar em uma lista
gigantesca, ou mesmo infinita?
35. Fibonacci
let rec fib n =
match n with
| x when n > 2 -> 1
| _ -> fib (n - 1) + fib (n - 2)
val seq: Stream[BigInt] = 0 #:: 1 #:: (seq zip
seq.tail).map { case (a, b) => a + b }
def elemento(posicao: Int): BigInt = seq(posicao
- 1)
3
5