Você está na página 1de 2

Programação funcional: funções puras

1. As funções puras nos dizem que uma função terá sempre a mesma saída a partir de
uma mesma entrada. Sabendo disso, pense em uma solução para a seguinte questão:
Você é assessor de TI do gabinete de um vereador de sua cidade. Minutos antes de
uma cerimônia, ele solicita que você insira a string "Sr." na frente do nome de
todos os 200 convidados
para o evento. Essa lista é extraída do sistema que você administra e precisa ser
deixada na portaria para aguardar a chegada dos convidados.
Qual das alternativas abaixo indica uma função que você utilizaria para resolver
essa situação em nível de código?

R: B. Função map.
Dentre as alternativas, a função map seria a ideal para auxiliar em uma solução de
código que varreria a lista de convidados e, a partir daí, inseriria uma expressão
lambda para inserir a
string "Sr.". A função filter iria filtrar dados, sendo que seria necessário
aplicá-la em todos os nomes. A função zip retorna uma lista de tuplas e é ideal
para a criação de conjuntos de dados.
A função reduce, por sua vez, faz o somatório dos elementos do arry, e a função
currying recebe parâmetros parcialmente e retorna uma nova função.

2. A compreensão de listas em programação funcional permite criar soluções de


problemas complexos a partir da manipulação destas. Embora a linguagem Haskell não
seja uma linguagem
muito utilizada, é bem fácil de ser interpretada e sua notação é simples.
Dada a seguinte expressão na linguagem funcional Haskell, identifique a alternativa
que representa o que está sendo pedido por ela:
ghci > [x*2+1 | x <- [1...1000] ] . x

R: A. Pede que números de 1 a 1000 sejam multiplicados por 2 e somados por 1.


A expressão Haskell denota que os elementos no intervalo de 1 até 1000 sejam
executados de tal forma que cada elemento executado seja multiplicado por 2 e ao
produto seja somado 1.
Isso é possível de ser verificado a partir de algumas particularidades da
linguagem:
– Os pontos de reticência (...) denotam a continuidade de um intervalo, ou seja,
todo o intervalo entre o primeiro e o último elemento, e não apenas o 1 e o 1000.
– Na linguagem Haskell, a saída da função fica à esquerda, diferente de muitas
outras linguagens, em que as instruções da função geralmente ficam no final da
linha. Nesse caso, é
solicitado que o "x" (todos os elementos entre 1 e 1000) seja multiplicado por 2 e
somado a 1. Isso inclui o 1 e o 1000 e exclui os valores que vêm antes e depois
deles.

3. Davi começou a trabalhar no NTI da Embrapa de sua cidade e está tendo seus
primeiros contatos com linguagens funcionais. Seu chefe disse que ele irá trabalhar
nos projetos de
pesquisa genética de gado. Davi, atualmente, programa em Python, então seu superior
lhe deu uma apostila de programação funcional e o seguinte problema para resolver:
Faça uma função que retorne todos os dados negativos dessa lista, que se refere ao
aumento de peso do gado no último semestre.
Qual das expressões abaixo conseguiria retornar o que foi pedido para Davi?

R: A. def NumNeg (numeros) : return (list(filter(lambda numero: numero < 0,


numeros)))
Utilizando um filtro e a expressão lambda, cada número será verificado para ver se
é menor que zero. A expressão def NumNeg (numeros) : return (list(filter(lambda
numero: numero < 0,
numeros))) retorna um array com a lista contendo apenas os números negativos.
Sinais de > (maior) e = (igual) anulam as demais questões, tornando-as impossíveis
de retornar o que se
pede. A função reduce acarreta a aglomeração de valores, ou seja, seu somatório e a
redução a apenas um número; portanto, não está de acordo com o enunciado.

4. Um sistema eficiente tem em suas linhas conceitos que permitem herdar, abstrair
e modificar atributos e métodos. Os conceitos de programação funcional, por meio
da pureza de
funções, elevam o nível de abstração de uma aplicação, entregando muita qualidade.
Nesse sentido, analise qual das alternativas a seguir está correta em relação à
função abaixo:
def analisa_func(elemento, indice):

elementos [indice] +=1


return elementos

R: C. Trata-se de uma função impura, pois a lista chamada elemento sofre mudança a
cada execução da função, conforme o incrementador logo abaixo.
Trata-se de uma função impura, pois a lista chamada elemento é incrementada a cada
execução da função. Um detalhe importante da programação Python é que ela não é uma
linguagem
funcional, mas permite implementar diversos conceitos de programação funcional.
Função pura é imutável e não tem alteração de estado, essa é a definição.

5. Leonardo está desenvolvendo uma aplicação mobile utilizando React. Em um dado


momento do código, ele está implementando um bloco que receberá o somatório de dois
parâmetros
e a multiplicação de outro. Qual solução funcional (função) ele pode implementar
para que esse código tenha uma correta implementação e maior facilidade de
verificação de erros?

R: D. Função currying.
Ele poderá implementar a função currying, para receber todos os parâmetros de
multiplicação e soma e executá-los um a um, retornando uma nova função até chegar a
um único
argumento. A função filter trata de listas filtrando dados a partir de uma dada
instrução. Compreensão de listas é utilizada para realizar cálculos complexos em
listas com verificação de
intervalos e condições matemáticas mais complexas. A função map varre uma dada
estrutura (lista, tuplas e outras) para executar individualmente as instruções nos
elementos. A função
zip reúne elementos e retorna listas de tuplas.

Você também pode gostar