Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?

Dickson S. Guedes
Dickson S. GuedesDatabase Administrator em Confesol - Confederação Nacional das Cooperativas de Crédito
Pattern matching
O que é? Onde vive?
Do que se alimenta? Como se reproduz?
por Dickson S. Guedes
v1.0
esta palestra foi prática e simulou um jogo
interagindo com os participantes…
faltou muito para ser uma palestra completa sobre
pattern matching…
uma segunda parte desta palestra pode ser
apresentada, aprofundando-se mais sobre diversas
estruturas de dados...
só depende de vocês :)
loading game...
LEVEL 1
solitário
preparem-se...
a
b
a
b
a
b
a
b
LEVEL 1
completed!
LEVEL 2
acompanhado
preparem-se...
a
b
c
a
b
c
a
b
c
LEVEL 2
completed!
LEVEL 3
abraçado
preparem-se...
a
b
c
a
b
c
“
“
b
g
c “
“
LEVEL 3
completed!
nutella mode
disabled!
LEVEL 4
Binary
String é um Binary
codificado em UTF-8
“...” = <<“...”>>
x = “a” # x é o binário a
x = “b” # x virou o binário b
^x = “c” # x é b que não casa com c
o que acontece?
preparem-se...
b
a
c “ola”
‘ola’
“olá”
<<“olá”>>
b
a
c <<“ola”>>
‘olá’
“olá”
<<“ol”, 225 :: utf8>>
referência ...
Em UTF-8:
“á” => LATIN SMALL LETTER A WITH ACUTE
Em HTML
“á” => &#225;
Em Elixir
“á” => <<225 :: utf8>>
LEVEL 4
completed!
LEVEL 5
recursivo
Para entender
recursividade você
precisa entender
recursividade
respirem...
lista são escritas assim:
lista = [1, 2, 3, 4, 5]
lista tem uma cabeça e uma calda, então
na lista acima
cabeça (ou head) é o número 1
calda (ou tail) é a lista [2, 3, 4, 5]
vendo de outro jeito head e tail:
[1, 2, 3, 4, 5]
na prática se eu faço:
lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
[ head | tail ] = lista
então:
head é 1 # apenas um número
tail é [2, 3, 4, 5, 6, 7, 8, 9, 0] # uma lista
vendo de outro jeito head e tail:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
lista = [1, 2, 3, 4, 5]
[ head | tail ] = lista
head é 1 e tail é [2, 3, 4, 5]
[ head | tail ] = tail
head é 2 e tail é [3, 4, 5]
[ head | tail ] = tail
head é 3 e tail é [4, 5]
[ head | tail ] = tail
head é 4 e tail é [5]
Para não
ter dúvida!
Se tail é [5], ao executar:
[ head | tail ] = tail
o que acontece?
Nada de erro, head é 5 e tail é []
Depois disto, ao executar:
[ head | tail ] = tail
o que acontece?
lista = [1, 2, 3, 4, 5]
[ head, second | tail ] = lista
head é ?
second é ?
tail é ?
Para não
ter dúvida
mesmo!
lista = [1, 2, 3, 4, 5]
[ head, second | tail ] = lista
head é 1
second é 2
tail é [3, 4, 5]
Para não
ter dúvida
mesmo!
Parabéns!
Você desbloqueou o
modo hands-on!
Foi neste ponto que eu cansei de fazer slides...
Usando o iex para testar a leitura da ID TAG de uma música MP3
iex(1)> musica = File.read!('musica.mp3')
<<73, 68, 51, 4, 0, 0, 0, 0, 8, 120, 84, 83, 83, 69, 0, 0, 0, 11,
0, 0, 3, 76, 97, 118, 102, 53, 54, 46, 49, 46, 48, 84, 73, 84,
50, 0, 0, 0, 26, 0, 0, 0, 73, 109, 97, 103, 105, 110, 101, 32,
...>>
iex(2)> tamanho = byte_size(musica) - 128
3543914
iex(3)> << audio :: bytes-size(tamanho), id3tag :: binary>> = musica
<<73, 68, 51, 4, 0, 0, 0, 0, 8, 120, 84, 83, 83, 69, 0, 0, 0, 11, 0, 0, 3,
76, 97, 118, 102, 53, 54, 46, 49, 46, 48, 84, 73, 84, 50, 0, 0, 0, 26, 0,
0, 0, 73, 109, 97, 103, 105, 110, 101, 32, ...>>
iex(4)> audio
<<73, 68, 51, 4, 0, 0, 0, 0, 8, 120, 84, 83, 83, 69, 0, 0, 0, 11, 0, 0, 3,
76, 97, 118, 102, 53, 54, 46, 49, 46, 48, 84, 73, 84, 50, 0, 0, 0, 26, 0,
0, 0, 73, 109, 97, 103, 105, 110, 101, 32, ...>>
iex(5)> id3tag
<<84, 65, 71, 73, 109, 97, 103, 105, 110, 101, 32, 68, 114, 97, 103, 111,
110, 115, 32, 45, 32, 84, 104, 117, 110, 100, 101, 114, 0, 0, 0, 0, 0, 73,
109, 97, 103, 105, 110, 101, 32, 68, 114, 97, 103, 111, 110, 115, 0, 0,
...>>
iex(6)> << header :: bytes-size(3),
titulo :: bytes-size(30),
rest :: binary >> = id3tag
<<84, 65, 71, 73, 109, 97, 103, 105, 110, 101, 32, 68, 114, 97, 103, 111,
110, 115, 32, 45, 32, 84, 104, 117, 110, 100, 101, 114, 0, 0, 0, 0, 0, 73,
109, 97, 103, 105, 110, 101, 32, 68, 114, 97, 103, 111, 110, 115, 0, 0,
...>>
iex(7)> header
"TAG"
iex(8)> titulo
"Imagine Dragons - Thunder"
LEVEL 5
completed!
Quer saber mais?
Deixe-me saber!
twitter.com/guediz
1 de 47

Recomendados

PythonPython
PythonMatheus Dos Santos Lima
468 visualizações53 slides
Iniciando em PythonIniciando em Python
Iniciando em PythonRober Guerra
1.4K visualizações52 slides
Arvores.pdfArvores.pdf
Arvores.pdfMarceloKwecko
1 visão32 slides
Shell Tips and Tricks for sysadminShell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadminMagno Torres
1.1K visualizações37 slides

Mais conteúdo relacionado

Similar a Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?

Resumo computação IResumo computação I
Resumo computação IÉrick Barbosa de Souza
962 visualizações53 slides
Pep 8Pep 8
Pep 8Renato Oliveira
1.4K visualizações26 slides
Nivelamento2010 matematicaNivelamento2010 matematica
Nivelamento2010 matematicaAlex Cleres
5K visualizações67 slides

Similar a Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?(8)

Resumo computação IResumo computação I
Resumo computação I
Érick Barbosa de Souza962 visualizações
Pep 8Pep 8
Pep 8
Renato Oliveira1.4K visualizações
Aprendizado de Máquina em Linguagem NaturalAprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem Natural
Beatriz Albiero151 visualizações
Nivelamento2010 matematicaNivelamento2010 matematica
Nivelamento2010 matematica
Alex Cleres5K visualizações
Olá Python!Olá Python!
Olá Python!
Henrique Gabriel Gularte Pereira482 visualizações

Mais de Dickson S. Guedes(20)

Ganhando tempo automatizando com SQLGanhando tempo automatizando com SQL
Ganhando tempo automatizando com SQL
Dickson S. Guedes15 visualizações
Primeiros passos machine learning PostgreSQLPrimeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQL
Dickson S. Guedes736 visualizações
Dicas de sobrevivência de um DBA sem mouseDicas de sobrevivência de um DBA sem mouse
Dicas de sobrevivência de um DBA sem mouse
Dickson S. Guedes270 visualizações
Destistificando o EXPLAIN Destistificando o EXPLAIN
Destistificando o EXPLAIN
Dickson S. Guedes260 visualizações
Falando "Postgrês"Falando "Postgrês"
Falando "Postgrês"
Dickson S. Guedes222 visualizações
Se meu elefante falasseSe meu elefante falasse
Se meu elefante falasse
Dickson S. Guedes692 visualizações
O Elefante PoliglotaO Elefante Poliglota
O Elefante Poliglota
Dickson S. Guedes727 visualizações
Como encontrar uma agulha num palheiro de logsComo encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logs
Dickson S. Guedes651 visualizações
Gerenciando múltiplas versões do PostgreSQL com pgvmGerenciando múltiplas versões do PostgreSQL com pgvm
Gerenciando múltiplas versões do PostgreSQL com pgvm
Dickson S. Guedes624 visualizações
PGXN - Como distribuir suas extensões com o PostgreSQLPGXN - Como distribuir suas extensões com o PostgreSQL
PGXN - Como distribuir suas extensões com o PostgreSQL
Dickson S. Guedes385 visualizações
Pgxn.pgdayPgxn.pgday
Pgxn.pgday
Dickson S. Guedes253 visualizações
Conhecendo Postgresql.- ENECOMP 2009Conhecendo Postgresql.- ENECOMP 2009
Conhecendo Postgresql.- ENECOMP 2009
Dickson S. Guedes433 visualizações
Minicurso Postgresql - Enecomp 2009Minicurso Postgresql - Enecomp 2009
Minicurso Postgresql - Enecomp 2009
Dickson S. Guedes220 visualizações
Testes unitarios no PostgreSQL com pgTAPTestes unitarios no PostgreSQL com pgTAP
Testes unitarios no PostgreSQL com pgTAP
Dickson S. Guedes812 visualizações

Último(10)

Dimensions  - Tutorial.pptxDimensions  - Tutorial.pptx
Dimensions - Tutorial.pptx
barbaraguerra08828 visualizações
Competências para extrair inovação na tecnologia!Competências para extrair inovação na tecnologia!
Competências para extrair inovação na tecnologia!
Annelise Gripp11 visualizações
Fedora.pptxFedora.pptx
Fedora.pptx
JooVictorMarques2311 visualizações
SciELO: O Guia.SciELO: O Guia.
SciELO: O Guia.
susieconceicao11841 visualizações
Capturas microbit.docxCapturas microbit.docx
Capturas microbit.docx
seruto2310148 visualizações

Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?

  • 1. Pattern matching O que é? Onde vive? Do que se alimenta? Como se reproduz? por Dickson S. Guedes v1.0
  • 2. esta palestra foi prática e simulou um jogo interagindo com os participantes… faltou muito para ser uma palestra completa sobre pattern matching… uma segunda parte desta palestra pode ser apresentada, aprofundando-se mais sobre diversas estruturas de dados... só depende de vocês :)
  • 6. a b
  • 7. a b
  • 8. a b
  • 9. a b
  • 13. a b c
  • 14. a b c
  • 15. a b c
  • 19. a b c
  • 25. String é um Binary codificado em UTF-8 “...” = <<“...”>>
  • 26. x = “a” # x é o binário a x = “b” # x virou o binário b ^x = “c” # x é b que não casa com c o que acontece?
  • 30. Em UTF-8: “á” => LATIN SMALL LETTER A WITH ACUTE Em HTML “á” => &#225; Em Elixir “á” => <<225 :: utf8>>
  • 35. lista são escritas assim: lista = [1, 2, 3, 4, 5] lista tem uma cabeça e uma calda, então na lista acima cabeça (ou head) é o número 1 calda (ou tail) é a lista [2, 3, 4, 5] vendo de outro jeito head e tail: [1, 2, 3, 4, 5]
  • 36. na prática se eu faço: lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] [ head | tail ] = lista então: head é 1 # apenas um número tail é [2, 3, 4, 5, 6, 7, 8, 9, 0] # uma lista vendo de outro jeito head e tail: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
  • 37. lista = [1, 2, 3, 4, 5] [ head | tail ] = lista head é 1 e tail é [2, 3, 4, 5] [ head | tail ] = tail head é 2 e tail é [3, 4, 5] [ head | tail ] = tail head é 3 e tail é [4, 5] [ head | tail ] = tail head é 4 e tail é [5] Para não ter dúvida!
  • 38. Se tail é [5], ao executar: [ head | tail ] = tail o que acontece?
  • 39. Nada de erro, head é 5 e tail é [] Depois disto, ao executar: [ head | tail ] = tail o que acontece?
  • 40. lista = [1, 2, 3, 4, 5] [ head, second | tail ] = lista head é ? second é ? tail é ? Para não ter dúvida mesmo!
  • 41. lista = [1, 2, 3, 4, 5] [ head, second | tail ] = lista head é 1 second é 2 tail é [3, 4, 5] Para não ter dúvida mesmo!
  • 42. Parabéns! Você desbloqueou o modo hands-on! Foi neste ponto que eu cansei de fazer slides...
  • 43. Usando o iex para testar a leitura da ID TAG de uma música MP3 iex(1)> musica = File.read!('musica.mp3') <<73, 68, 51, 4, 0, 0, 0, 0, 8, 120, 84, 83, 83, 69, 0, 0, 0, 11, 0, 0, 3, 76, 97, 118, 102, 53, 54, 46, 49, 46, 48, 84, 73, 84, 50, 0, 0, 0, 26, 0, 0, 0, 73, 109, 97, 103, 105, 110, 101, 32, ...>> iex(2)> tamanho = byte_size(musica) - 128 3543914
  • 44. iex(3)> << audio :: bytes-size(tamanho), id3tag :: binary>> = musica <<73, 68, 51, 4, 0, 0, 0, 0, 8, 120, 84, 83, 83, 69, 0, 0, 0, 11, 0, 0, 3, 76, 97, 118, 102, 53, 54, 46, 49, 46, 48, 84, 73, 84, 50, 0, 0, 0, 26, 0, 0, 0, 73, 109, 97, 103, 105, 110, 101, 32, ...>> iex(4)> audio <<73, 68, 51, 4, 0, 0, 0, 0, 8, 120, 84, 83, 83, 69, 0, 0, 0, 11, 0, 0, 3, 76, 97, 118, 102, 53, 54, 46, 49, 46, 48, 84, 73, 84, 50, 0, 0, 0, 26, 0, 0, 0, 73, 109, 97, 103, 105, 110, 101, 32, ...>> iex(5)> id3tag <<84, 65, 71, 73, 109, 97, 103, 105, 110, 101, 32, 68, 114, 97, 103, 111, 110, 115, 32, 45, 32, 84, 104, 117, 110, 100, 101, 114, 0, 0, 0, 0, 0, 73, 109, 97, 103, 105, 110, 101, 32, 68, 114, 97, 103, 111, 110, 115, 0, 0, ...>>
  • 45. iex(6)> << header :: bytes-size(3), titulo :: bytes-size(30), rest :: binary >> = id3tag <<84, 65, 71, 73, 109, 97, 103, 105, 110, 101, 32, 68, 114, 97, 103, 111, 110, 115, 32, 45, 32, 84, 104, 117, 110, 100, 101, 114, 0, 0, 0, 0, 0, 73, 109, 97, 103, 105, 110, 101, 32, 68, 114, 97, 103, 111, 110, 115, 0, 0, ...>> iex(7)> header "TAG" iex(8)> titulo "Imagine Dragons - Thunder"
  • 47. Quer saber mais? Deixe-me saber! twitter.com/guediz