Skip to content

elc117/apresentacao-bim1-2025b-nilokao

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

apresentacao-bim1-2025b-nilokao

Parte prática:

Exercícios destacados:

Exercício destacado 1 - Defina uma função htmlItem :: String -> String que receba uma String e adicione tags <li> e </li> como prefixo e sufixo, respectivamente. Por exemplo, se a entrada for "abc", a saída será "<li>abc</li>". Use o operador ++ para concatenar strings (este operador serve para concatenar quaisquer listas do mesmo tipo).

GIF do exercício: Exercício destacado 1

Exercício destacado 2 - Defina uma função isElderly :: Int -> Bool que receba uma idade e resulte verdadeiro caso a idade seja maior que 65 anos.

GIF do exercício: Exercício destacado 2

Exercício destacado 3 - Crie uma função countSpaces que receba uma string e retorne o número de espaços nela contidos. Dica 1: você vai precisar de uma função que identifica espaços. Dica 2: aplique funções consecutivamente, isto é, use o resultado de uma função como argumento para outra.

GIF do exercício: Exercício destacado 3

Parte teórica:

Funções de alta ordem:

Definição: funções que podem ou receber outras funções como parâmetro ou retornar. Em Haskell (além das funções map e filter apresentadas em aula), existem funções prontas muito relevantes e de uso corriqueiro em aplicações, sendo importante ao manipular listas. As funções são chamadas e deixadas em uma pilha, sempre guardando os valores dos argumentos, os endereços de retorno e variáveis locais, tal qual uma função dita "normal".

Exemplos:

  • all(): recebe como parâmetros uma função que retorna um booleano e uma lista e retorna um booleano True caso todos os elementos da lista obedeçam ao primeiro parâmetro e False caso contrário;
  • any(): semelhante ao all(), mas retorna True caso pelo menos um dos elementos corresponda à função passada como parâmetro;
  • takeWhile(): também recebe uma função e uma lista como parâmetros, mas dessa vez, a função criará uma nova lista, usando apenas os elementos que obedecerem ao parâmetro;
  • dropWhile(): o oposto da anterior, removerá os elementos que obedecem ao parâmetro.

*Exemplos para cada uma das funções podem ser encontrados na bibliografia.

Exemplo da função all(): Exemplo all

Em C, apesar de ser uma funcionalidade não muito usual, é possível utilziar funções de alta ordem, passando o endereço das funções passadas como parâmetro ou retorno.

Bônus: funções de alta ordem em R:

Assim como Haskell ou Python, R também possui funções de alta ordem, aqui vou destacar algumas, que fazem parte do grupo apply:

  • apply(): recebe um DataFrame, uma matriz ou um array multi-dimensional, uma margem e uma função. A margem diz se a função será aplicada nas linhas ou nas colunas daquela base de dados recebida, com 1 sendo para linhas e 2 para colunas, e posso passar como c(1,2) que irá concatenar e passar os dois valores juntos.
  • lapply(): recebe assim como o apply() e listas, e uma função, após aplicará a função em cada elemento recebido, e retornará uma lista;
  • sapply(): semelhante ao anterior, mas tenta "simplificar" o retorno, sempre tentando converter para vetor -> matriz -> lista, caso o anterior não dê certo;
  • vapply(): recebe um tipo de dado citado anteriormente, uma função que será aplicada nos elementos e o tipo de dado que será retornado.

Exemplo da função apply(): Exemplo apply

Funções lambda (funções anônimas):

As funções lambda são criadas com uma palavra-chave (ou símbolo, depende da linguagem), argumentos e uma expressão (código executado quando a mesma for chamada). Esse recurso serve para quando o programador quer criar uma função curta, que será utilizada pontualmente, mas não quer declará-la. Elas seguem o mesmo padrão de execução de instruções de uma função normal.

Exemplo em R:

quadrado <- function(x){
  res = x ^ 2
  return(res)
}
sapply(1:5, quadrado)

A função "quadrado" é uma funcão que recebe um número e retorna o seu quadrado, contudo, ela é muito simples, e pode ser substituída por uma versão inline, caso seu uso não seja repetitivo.

sapply(1:5, function(x) x^2)

Exemplo de função lambda em Python:

list(map(lambda x: x * x, numeros))

Fontes :

https://haskell.pesquisa.ufabc.edu.br/haskell/06.higher.order/
https://en.cppreference.com/w/c/language/pointer.html
https://lente.dev/posts/lambda/
https://www.dataquest.io/blog/apply-functions-in-r-sapply-lapply-tapply/

About

apresentacao-bim1-2025b-nilokao created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published