click below
click below
Normal Size Small Size show me how
Trabalho LP 2013
Conjunto de cartas sobre Linguagem Scala
| Question | Answer |
|---|---|
| Estrutura básica de uma função anonima. | (arg1 : ArgType, arg2 : ArgType, ... , argN : ArgType) => Corpo da função |
| Dada uma lista a Função deve encontrar múltiplos usando currying. | def filter(xs: List[Int], p: Int => Boolean): List[Int] = if (xs.isEmpty) xs else if (p(xs.head)) xs.head :: filter(xs.tail, p) else filter(xs.tail, p) def modN(n: Int)(x: Int) = ((x % n) == 0) |
| Enviar uma mensagem de uma classe para outra usando currying | def route(m:Message)(e:Endpoint) = { e.send(m) } |
| A expressão cria uma função anônima sucessora para inteiros. | var inc = (x:Int) => x+1 var x = inc(7)-1 |
| É possível definir funções anônimas com múltiplos parâmetros. | var mul = (x: Int, y: Int) => x*y println(mul(3, 4)) |
| É possível definir funções anônimas sem parâmetros. | var userDir = () => { System.getProperty("user.dir") } println( userDir ) |
| Com currying, é possível passar uma lista de parâmetros eda qual uma função será aplicada a todos os elementos | scala> def modN(n: Int)(x: Int) = ((x % n) == 0) modN: (n: Int)(x: Int)Boolean |
| Em Scala, uma função com parâmetros múltiplos pode ser misturada (curried) | scala> val mod5 = modN(5) _ mod5: (Int) => Boolean = <function1> |
| Outro exemplo de uma função que usa currying para produzir múltiplos de dois números juntos. | scala> def multiply(m: Int)(n: Int): Int = m * n multiply: (m: Int)(n: Int)Int scala> multiply(2)(3) res0: Int = 6 |
| Mais um exemplo de função anônima associada a tipagem Int | scala> (x: Int) => x + 1 res2: (Int) => Int = <function1> scala> res2(1) res3: Int = 2 |
| Passagem de funções anônimas, com possível salvamento em variáveis | scala> val addOne = (x: Int) => x + 1 addOne: (Int) => Int = <function1> scala> addOne(1) res4: Int = 2 |
| Funções anônimas com maior controle através de colchetes, para melhor visualização. | def timesTwo(i: Int): Int = { println("hello world") i * 2 } |
| Outro exemplo de função anônima passada como argumento. | scala> { i: Int => println("hello world") i * 2 } res0: (Int) => Int = <function1> |
| Soma ou quadrado de inteiros usando funções anônimas | def sumInts(a: Int, b: Int): Int = sum(x => x, a, b) def sumSquares(a: Int, b: Int): Int = sum(x => x * x, a, b) |
| Um exemplo de função de soma com uso de currying. | def sum(f: Int => Int): (Int, Int) => Int = { def sumF(a: Int, b: Int): Int = if (a > b) 0 else f(a) + sumF(a + 1, b) sumF } |
| Outro exemplo de transformação de uma função de somatória no formato currying | val sum: (Int, Int) => Int = _ + _ val sumCurried: Int => Int => Int = sum.curried |
| União de parâmetros como formação de resultado em currying | def sum(a: Int)(b: Int) = a + b |
| Funções anônimas podendo se aplicado como forma de sintetizar funções matemáticas, como módulo. | def modN(n: Int)(x: Int) = ((x % n) == 0) |
| Construção do Triangulo de Pascal aplicando currying. | def pascal(c: Int, r: Int): Int = if (c == 0 || r == 0 || c == r) 1 else pascal(c - 1, r - 1) + pascal(c, r - 1) |
| Inferência de tipos são também parte das funções anônimas | val list = List(1, 2, 3, 4) list.reduceLeft( (x, y) => x + y ) |
| Aplicação da função lambda para o contexto da função anônima. | list.reduceLeft( _ + _ ) |
| Aplicação de filtros para elementos de uma lista com base em funções currying | scala> l filter (_ % 5 == 0) res4: List[Int] = List(5, 10, 15, 20, 25, 30) |
| Transformando uma função de dois parâmetros em uma função curried que pode utilizar-se de vários parâmetros | scala> val partialCurryCat = curryCat("foo")(_) partialCurryCat: (String) => java.lang.String = <function> scala> partialCurryCat("bar") res3: java.lang.String = foobar |
| Agregando as variáveis como operadores da função generalizadas, através de currying. | def multiplier(i: Int)(factor: Int) = i * factor val byFive = multiplier(5) _ val byTen = multiplier(10) _ scala> byFive(2) res4: Int = 10 |