SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
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

Mais conteúdo relacionado

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

(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...Danilo J. S. Bellini
 
Aprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem NaturalAprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem NaturalBeatriz Albiero
 
Introdução à Linguagem de programação Python
Introdução à Linguagem de programação PythonIntrodução à Linguagem de programação Python
Introdução à Linguagem de programação Pythondmmartins
 
Nivelamento2010 matematica
Nivelamento2010 matematicaNivelamento2010 matematica
Nivelamento2010 matematicaAlex Cleres
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
 

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

(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
 
Resumo computação I
Resumo computação IResumo computação I
Resumo computação I
 
Pep 8
Pep 8Pep 8
Pep 8
 
Aprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem NaturalAprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem Natural
 
Introdução à Linguagem de programação Python
Introdução à Linguagem de programação PythonIntrodução à Linguagem de programação Python
Introdução à Linguagem de programação Python
 
Nivelamento2010 matematica
Nivelamento2010 matematicaNivelamento2010 matematica
Nivelamento2010 matematica
 
Olá Python!
Olá Python!Olá Python!
Olá Python!
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 

Mais de Dickson S. Guedes

Ganhando tempo automatizando com SQL
Ganhando tempo automatizando com SQLGanhando tempo automatizando com SQL
Ganhando tempo automatizando com SQLDickson S. Guedes
 
O mínimo necessário que você precisa conhecer sobre computação quântica
O mínimo necessário que você precisa conhecer sobre computação quânticaO mínimo necessário que você precisa conhecer sobre computação quântica
O mínimo necessário que você precisa conhecer sobre computação quânticaDickson S. Guedes
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorDickson S. Guedes
 
Primeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQLPrimeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQLDickson S. Guedes
 
Dicas de sobrevivência de um DBA sem mouse
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 mouseDickson S. Guedes
 
Curiosidades que você (talvez) não sabia e se sabia vale a pena lembrar
Curiosidades que você (talvez) não sabia e se sabia vale a pena lembrarCuriosidades que você (talvez) não sabia e se sabia vale a pena lembrar
Curiosidades que você (talvez) não sabia e se sabia vale a pena lembrarDickson S. Guedes
 
Como encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logsComo encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logsDickson S. Guedes
 
Como encontrar uma agulha no palheiro de logs do PostgreSQL
Como encontrar uma agulha no palheiro de logs do PostgreSQLComo encontrar uma agulha no palheiro de logs do PostgreSQL
Como encontrar uma agulha no palheiro de logs do PostgreSQLDickson S. Guedes
 
Gerenciando múltiplas versões do PostgreSQL com pgvm
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 pgvmDickson S. Guedes
 
PGXN - Como distribuir suas extensões com o PostgreSQL
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 PostgreSQLDickson S. Guedes
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Dickson S. Guedes
 
Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...
Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...
Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...Dickson S. Guedes
 
Conhecendo Postgresql.- ENECOMP 2009
Conhecendo Postgresql.- ENECOMP 2009Conhecendo Postgresql.- ENECOMP 2009
Conhecendo Postgresql.- ENECOMP 2009Dickson S. Guedes
 
Minicurso Postgresql - Enecomp 2009
Minicurso Postgresql - Enecomp 2009Minicurso Postgresql - Enecomp 2009
Minicurso Postgresql - Enecomp 2009Dickson S. Guedes
 
Testes unitarios no PostgreSQL com pgTAP
Testes unitarios no PostgreSQL com pgTAPTestes unitarios no PostgreSQL com pgTAP
Testes unitarios no PostgreSQL com pgTAPDickson S. Guedes
 

Mais de Dickson S. Guedes (20)

Ganhando tempo automatizando com SQL
Ganhando tempo automatizando com SQLGanhando tempo automatizando com SQL
Ganhando tempo automatizando com SQL
 
O mínimo necessário que você precisa conhecer sobre computação quântica
O mínimo necessário que você precisa conhecer sobre computação quânticaO mínimo necessário que você precisa conhecer sobre computação quântica
O mínimo necessário que você precisa conhecer sobre computação quântica
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
 
Primeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQLPrimeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQL
 
Dicas de sobrevivência de um DBA sem mouse
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
 
Destistificando o EXPLAIN
Destistificando o EXPLAIN Destistificando o EXPLAIN
Destistificando o EXPLAIN
 
Falando "Postgrês"
Falando "Postgrês"Falando "Postgrês"
Falando "Postgrês"
 
Se meu elefante falasse
Se meu elefante falasseSe meu elefante falasse
Se meu elefante falasse
 
Curiosidades que você (talvez) não sabia e se sabia vale a pena lembrar
Curiosidades que você (talvez) não sabia e se sabia vale a pena lembrarCuriosidades que você (talvez) não sabia e se sabia vale a pena lembrar
Curiosidades que você (talvez) não sabia e se sabia vale a pena lembrar
 
O Elefante Poliglota
O Elefante PoliglotaO Elefante Poliglota
O Elefante Poliglota
 
Como encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logsComo encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logs
 
Como encontrar uma agulha no palheiro de logs do PostgreSQL
Como encontrar uma agulha no palheiro de logs do PostgreSQLComo encontrar uma agulha no palheiro de logs do PostgreSQL
Como encontrar uma agulha no palheiro de logs do PostgreSQL
 
Gerenciando múltiplas versões do PostgreSQL com pgvm
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
 
PGXN - Como distribuir suas extensões com o PostgreSQL
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
 
Pgxn.pgday
Pgxn.pgdayPgxn.pgday
Pgxn.pgday
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...
Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...
Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...
 
Conhecendo Postgresql.- ENECOMP 2009
Conhecendo Postgresql.- ENECOMP 2009Conhecendo Postgresql.- ENECOMP 2009
Conhecendo Postgresql.- ENECOMP 2009
 
Minicurso Postgresql - Enecomp 2009
Minicurso Postgresql - Enecomp 2009Minicurso Postgresql - Enecomp 2009
Minicurso Postgresql - Enecomp 2009
 
Testes unitarios no PostgreSQL com pgTAP
Testes unitarios no PostgreSQL com pgTAPTestes unitarios no PostgreSQL com pgTAP
Testes unitarios no PostgreSQL com pgTAP
 

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