Buscar

Paradigma programação - Programação funcional funções puras

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

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.
desafio
 Padrão de resposta esperado
É possível criar e unificar as tabelas utilizando a função zip:
Lista_1 = ['1: Literatura', '2: Administração', '3: Rede de computadores']
Lista_2 = ['Machado de Assis', 'Philip Kotler', 'Andrew Tanembaum']
list (zip(Lista_1, Lista_2))
O resultado em tela seria:
[('1: Literatura', 'Machado de Assis'), ('2: Administração', 'Philip Kotler'), ('3: Rede de computadores', 'Andrew Tanembaum')]
Ou seja, dessa forma, seria possível integrar as duas listas, otimizando o sistema da biblioteca.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Mais conteúdos dessa disciplina