Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
RevisaoIntroducao a Scheme
ListasReferencias
Conceitos de Linguagem de Programacao -
2
Arthur Jovita Guerra Thalles Santos Silva
Universidade Estadual de Santa Cruz - Ilheus, BA
1 de novembro de 2011
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
1 RevisaoNatureza das linguagens de ProgramacaoLinguagens Estaticas e DinamicasTipos de Linguagem
2 Introducao a SchemeIntroducao a SchemeFuncoes para construir funcoesControle de Fluxo
3 Listas
4 Referencias
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Natureza das linguagens de ProgramacaoLinguagens Estaticas e DinamicasTipos de Linguagem
Uma linguagem de programacao e uma linguagem que possuisintaxe (formato) e semantica (significado), e e usada paraexpressar uma sequencia de acoes computacionais que formamum programa.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Natureza das linguagens de ProgramacaoLinguagens Estaticas e DinamicasTipos de Linguagem
Linguagens Estaticas e Dinamicas
As linguagens de programacao podem ser classificadas deacordo com o tipo de sistema que elas usam, ele define comosao os metodos e as variaveis da linguagem.Em uma linguagem de tipo estatico, o compilador deveconhecer o tipo de uma variavel ou metodo antes da execucaodo programa (por isso, o tipo de uma variavel normalmente eexplicitamente declarado).Em uma linguagem de tipo dinamico, o tipo de uma variavelou metodo e desconhecido ate a execucao do programa.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Natureza das linguagens de ProgramacaoLinguagens Estaticas e DinamicasTipos de Linguagem
Exemplos de linguagens de tipo estatico: Java, Pascal, C,C# e C++. Exemplos de linguagens de tipo dinamico:Python, Javascript, Perl e Ruby.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Natureza das linguagens de ProgramacaoLinguagens Estaticas e DinamicasTipos de Linguagem
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Natureza das linguagens de ProgramacaoLinguagens Estaticas e DinamicasTipos de Linguagem
Tipificacao
A definicao de fortemente ou fracamente tipada tem relacaocom quao profundamente um sistema verifica as operacoesque podem ser feitas sobre uma estrutura de dados.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Natureza das linguagens de ProgramacaoLinguagens Estaticas e DinamicasTipos de Linguagem
Em linguagens fortemente tipadas:
as operacoes sao aplicadas para estruturas de dados bemdefinidas e cada operacao define os tipos de dados quedeve receber.
tendem a ter mais codigo para suas aplicacoes e suacurva de aprendizado pode ser maior.
o compilador tem garantias sobre o comportamento doprograma.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Natureza das linguagens de ProgramacaoLinguagens Estaticas e DinamicasTipos de Linguagem
Em linguagens fracamente tipadas:
As operacoes sao aplicadas para qualquer estrutura dedados, porem essas operacoes podem falhar em tempo deexecucao caso a estrutura nao suporte a operacao.
Sao mais simples em sua implementacao, porem e maisdifıcil encontrar o erro.
o compilador nao tem garantia sobre o comportamentodo programa porque uma estrutura de dados pode recebernovas funcionalidades em tempo de execucao.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Natureza das linguagens de ProgramacaoLinguagens Estaticas e DinamicasTipos de Linguagem
Em Java:
float soma(float a, int b) {return a + b;
}
Os tipos de dados que a operacao soma suporta estao bemdefinidos: a e float e b e int e o tipo de dado que a operacaodevolve tambem e definido float.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Natureza das linguagens de ProgramacaoLinguagens Estaticas e DinamicasTipos de Linguagem
Em Ruby:
def soma (a, b)return a + b
end
A funcao soma pode receber quaisquer tipos de dados para a eb, e a operacao sera aplicada sobre esses tipos, devolvendo umresultado de tipo desconhecido:
Se a e b forem String, o resultado sera uma Stringconcatenada de a e b;
Se a e b forem inteiros, o resultado sera um inteiro querepresenta a soma a+b;
Se a for um float e b um inteiro, o resultado sera um floatque representa a soma a+b.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Natureza das linguagens de ProgramacaoLinguagens Estaticas e DinamicasTipos de Linguagem
Vale a pena observar que em linguagens fracamente tipadas, apossibilidade de erros em tempo de execucao e muito maior.Por isso, e muito recomendavel o uso de testes para verificarerros antes de colocar um sistema em producao.Exemplos de linguagens fortemente tipadas: Java, Pascal, Ce C++.Exemplos de linguagens fracamente tipadas: Perl e Ruby.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Introducao a Scheme
Nomes em Scheme podem consistir em letras, emdigitos(nao no comeco), caracteres especiais(excetoparenteses)
Scheme nao e case Sensitive
O interpretador Scheme e um laco infinito deleitura-avaliacao-escrita. Le repetidamente uma expressaodigitada, interpreta-a e exibe o resultado
Os parametros em Scheme sao passados por valor, assim,indepedentemente se as funcoes alteram o valor real dosparametros nao sao afetados.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Inclui funcoes primitivas para as operacoes aritmeticasbasicas(+ - * /) que podem ter zero ou mais parametros
Se * nao receber nenhum parametro retorna 1,
se + nao recebe parametro retorna 0
Na subtracao todos os valores, exceto o primeiro, saosubtraıdos do primeiro.
A divisao e semelhante a subtracao
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Expressao Valor50 50(* 2 5 ) 10(+ 1 2 3 ) 6(- 9 8 ) 1( / 10 2 ) 5
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Scheme usa a notacao Lambda na forma de lista para definirfuncoes. Por exemplo,
( LAMBDA (L) (CAR(CDR L)))
e uma funcao que retorna o segundo elemento da lista L.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
A funcao de forma especial DEFINE serve para duas coisas:vincular um nome a um valor e a uma expressao lambda.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Por exemplo,
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Qual o resultado da chamada:
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Simulando a chamada anterior:
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
LET
Fazendo uma funcao chamada percentagem-lado-perimetro-1que visualiza o perımetro do triangulo e as porcentagens dosseus lados em relacao ao perımetro.
Vemos que o calculo do perımetro, (+ a b c), e repetidoquatro vezes
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Para evitar repeticoes deste tipo, bastaria definir uma variavellocal, com o valor correspondente ao calculo repetido, pronta aser utilizada sempre que fosse necessaria.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Estrutura do if
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Exemplo:
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Operador Logico
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
COND
Vemos que IF requer um numero fixo de parametros e naopermite que mais de um predicado seja verdadeiro no mesmomomento. Para estes casos usamos o COND, cuja forma gerale:
(COND(predicado1 expressao expressao)(predicado2 expressao expressao)(predicado3 expressao expressao)(ELSE expressao expressao)
)
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Exemplo de funcao cond
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Exemplo de chamadas a funcao cond:
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Introducao a SchemeFuncoes para construir funcoesControle de Fluxo
Avaliacao do predicado COND
Os predicados dos parametros sao avaliados em ordem a partirdo primeiro ate que um seja #T, quando o primeiro predicado#T e encontrado suas expressoes sao avaliadas e o valor daultima e retornado como o de COND.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Listas
Listas sao principais estruturas de dados da Scheme. Eexistem dois seletores de lista primitivos: CAR e CRD.
CAR retorna o cabeca da lista
CRD retorna a lista sem o elemento cabeca. Por exemplo,
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
(CAR ’(A B C)) retorna A(CAR ’((A B) C D)) retorna (A B)(CAR ’()) e um erro.(CRD ’(A B C)) retorna (B C)(CRD ’((A B) C D)) retorna (C D)(CRD ’(A)) retorna ()
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Como fazemos para criar listas?
CONS
E uma funcao que recebe dois argumentos e forma uma listacom ambos, sendo que o primeiro argumento pode ser atomoou lista e o segundo geralmente e uma lista.CONS concatena o segundo argumento no primeiro, assim oprimeiro parametro e o CAR da nova lista.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
(CONS ’A ’()) retorna (A)(CONS ’A ’(B C)) retorna (A B C)(CONS ’() ’(A B)) retorna (() A B)(CONS ’(A B) ’(C D)) retorna ((A B) C D)
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
E quando queremos montar uma lista com um grande numerode parametros?
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Existe uma outra funcao de criacao de listas chamada LIST,ela constroi listas a partir de um numero variavel deparametros.
(LIST ’uesc’ ’itabuna’ ’ilheus’)
E o mesmo que:
(CONS ’uesc (CONS ’itabuna (CONS ’ilheus ’() )))
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Scheme tambem possui 3 funcoes de predicado importantes,sao elas: EQ?, NULL?, e LIST?. Elas sao funcoes booleanas,por isso terminam com ?.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
EQ?
EQ? recebe dois parametros e retorna #T ambos forematomos e forem iguais, caso contrario retorna lista vazia () emvez de #F.
(EQ? ’A ’A) retorna #T
(EQ? ’A ’B) retorna ()
(EQ? ’A ’(A B)) retorna ()
(EQ? ’(A B) ’(A B)) retorna () ou #T
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
No ultimo caso, depende da implementacao de EQ?. Antes decriar uma nova lista o interpretador verifica se essa lista jaexiste, caso ela exista apenas e criado um novo ponteiro paraessa lista, retornando #T. Porem, em alguns casos, e difıcildetectar a presenca de uma lista identica, assim uma nova listae criada na memoria, retornando ().
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
LIST?
A funcao LIST? recebe apenas um argumento e retorna #T sefor uma lista, se nao for retorna ().
(LIST? ’(X,Y)) retorna #T
(LIST? ’X) retorna ()
(LIST? ’()) retorna #T
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
NULL?
A funcao NULL? retorna #T se seu unico argumento e umalista vazia.
(NULL? ’(A B)) retorna ()
(NULL? ’()) retorna #T
(NULL? ’(())) retorna ()
E neste ultimo caso?
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
NULL?
A funcao NULL? retorna #T se seu unico argumento e umalista vazia.
(NULL? ’(A B)) retorna ()
(NULL? ’()) retorna #T
(NULL? ’(())) retorna ()
E neste ultimo caso? O que acontece e que uma lista epassada, e esta lista contem um elemento, que e uma listavazia.
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2
RevisaoIntroducao a Scheme
ListasReferencias
Referencias
Sebesta, Robert W Conceitos de Linguagem deProgramacao. Editora Bookman, Porto Alegre: 2000
http://haskell.tailorfontela.com.br/introduction
Arthur Jovita Guerra, Thalles Santos Silva Conceitos de Linguagem de Programacao - 2