Post on 25-Dec-2014
description
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
Projeto de especificacao da linguagem C+-
Caio Santos, Gabriel Valsiljevic, Jean Silva, Victor HenriqueUniversidade Federal do Rio Grande do Norte
Centro de Ciencias Exatas e da TerraDepartamento de Informatica e Matematica Aplicada
4 de junho de 2013
1/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
CONTEUDOINTRODUCAO
LINGUAGEM IMPERATIVADomınio de AplicacaoPrincipais caracterısticasSistema de TiposTipos PrimitivosDesignadores dos tipos primitivosTipos compostosExpressoes da LinguagemEntrada e SaıdaEstruturas de Controle
LINGUAGEM FUNCIONALDiferencas marcantes do paradigma imperativoSistema de TiposExpressoes da LinguagemEscopo e Tempo de VidaArraysEstruturas de controle
LINGUAGEM LOGICADiferencas marcantes do paradigma imperativoTiposEscopoOperadores e expressoesArmazenamento de valoresArraysEstruturas de controle
2/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
DOMINIO DE APLICACAO
I Linguagem baseada em C e FORTRANI Domınio de aplicacao cientıfico
I Estruturas de dados simplesI Manipulacao de grandes quantidades de dadosI Alta precisao
I Publico alvoI Matematicos e cientistas
3/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
PRINCIPAIS CARACTERISTICAS
I LegibilidadeI Pequeno numero de componentes basicos (simplicidade
global)I Nomes (designadores) dos tipos primitivos refletem bem
suas finalidades. Ex.: int ≡ inteiroI E case sensitve
I ConfiabilidadeI E fortemente tipadaI Oferece mecanismos de tratamento de excecoes
I Capacidade de escritaI E pouca ortogonal
I Sistema de implementacao: compiladaI Usa compilacao separada
4/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
SISTEMA DE TIPOS
I A linguagem e fortemente tipadaI Compatibilidade entre tipos
I Compatibilidade de nomes e estruturas serao usados
5/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
TIPOS PRIMITIVOS
Tabela: Designadores dos tipos primitivos da linguagem
Nome Descricao Tamanho Faixachar Caractere 1byte −128 a 127 e unsigned: 0 a 255short Inteiro curto 2bytes −32768 a 32767 e unsigned: 0 a 65535
int Inteiro 4bytes −2147483648 a 2147483647 e unsigned: 0a 4294967295
long Inteiro longo 8bytes −263 a 263 − 1 e unsigned: 0 a 264 − 1bigInt Inteiro muito longo 16bytes −2127 a 2127 − 1 e unsigned: 0 a 2128 − 1bool Valor booleano. 1byte true ou falsefloat Pronto flutuante 4bytes ±3.4e ± 38
double Precisao dupla doponto flutuante
8bytes ±1.7e ± 308
complex Numeros comple-xos
8bytes −264 a 264 − 1
6/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
TIPOS COMPOSTOS
I Conjunto (Set)1 import utility.set;2 ...3 set <int> A;4 set < set <int> > B;5 B.add(A);6 /**7 * $B \supset A$8 */
I Lista (List)1 import utility.list;2 ...3 list <int> a;4 list < list <int> > b;
7/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
TIPOS COMPOSTOS
I Conjunto (Set)1 import utility.set;2 ...3 set <int> A;4 set < set <int> > B;5 B.add(A);6 /**7 * $B \supset A$8 */
I Lista (List)1 import utility.list;2 ...3 list <int> a;4 list < list <int> > b;
7/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
TIPOS COMPOSTOS
I Pilha (Stack)1 import utility.stack2 ...3 stack <int> mystack;4 mystack.push(5);5 mystack.push(4);6 mystack.push(3);7 mystack.pop();8 write("%d\n", mystack.top());
I Fila (Queue)1 import utility.queque;2 ...3 queue f<int> myqueue;4 myqueue.push_back(8);5 myqueue.push_back(7);6 write("front: %d; back: %d\n", myqueue.front(), myqueue.back());7 myqueue.pop_front();
8/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
TIPOS COMPOSTOS
I Pilha (Stack)1 import utility.stack2 ...3 stack <int> mystack;4 mystack.push(5);5 mystack.push(4);6 mystack.push(3);7 mystack.pop();8 write("%d\n", mystack.top());
I Fila (Queue)1 import utility.queque;2 ...3 queue f<int> myqueue;4 myqueue.push_back(8);5 myqueue.push_back(7);6 write("front: %d; back: %d\n", myqueue.front(), myqueue.back());7 myqueue.pop_front();
8/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
TIPOS COMPOSTOS
I Vetor1 int v[10];2 int vet[3] = {1, 2, 3};3 int mat[2][2] = {1, 0;4 0, 1};
I O usuario pode desejar definir seus proprios tipos1 struct ListaT {2 int info;3 ListaT * prox;4 };5 ...
9/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
TIPOS COMPOSTOS
I Vetor1 int v[10];2 int vet[3] = {1, 2, 3};3 int mat[2][2] = {1, 0;4 0, 1};
I O usuario pode desejar definir seus proprios tipos1 struct ListaT {2 int info;3 ListaT * prox;4 };5 ...
9/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
EXPRESSOES DA LINGUAGEM
Operador DescricaoOperadores Aritimeticos
+ adicao- subtracao* multiplicacao/ divisao% mod ou resto de divisao
Incremento e Decremento++ incremento– decremento
Operadores Relacionais== Igualdade!= Diferenca
>, < maior que, e menor que>=, <= maior igual, e menor igual
10/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
EXPRESSOES DA LINGUAGEM
Operador DescricaoOperadores Logicos
! NOT&& AND|| OR
Operadores bit-a-bit& AND| ORˆ XOR˜ NOT
11/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
TIPOS DEFINIDOS PELO USUARIO
Definicao1 template <typedef struct T>2 typedef struct Par {3 T a, b;4 };5
6 template <typedef struct T>7 function getMax (Par <T> p ) : T {8 return p.a > p.b ? p.a : p.b;9 }
Uso1 Par <double> p;2 p.a = 5.5, p.b = 5.4;3 write("%lf", getMax(p));
12/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ENTRADA E SAIDA
1 import io;2
3 function main(): int {4 int a, b;5 read("%i %i", &a, &b);6 int soma = a + b;7 write("%i\n", soma);8 return 0;9 }
13/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ESTRUTURAS DE CONTROLECONDICIONAL: COMANDO IF
1 import io;2
3 function main(): int {4 int n;5 read("%d", &n);6 if (n > 0) {7 write("%d eh um numero positivo\n", n);8 } else if(n < 0){9 write("%d eh um numero negativo\n", n);
10 } else {11 write("%d eh zero\n", n);12 }13 return 0;14 }
14/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ESTRUTURAS DE CONTROLECONDICIONAL: COMANDO SWITCH-CASE
1 import io;2
3 function main(): int {4 string op;5 read("%s", &op);6 switch(op) {7 case "um":8 write("1\n");9 break;
10 case "dois":11 write("2\n");12 break;13 case "tres":14 write("3\n");15 break;16 default:17 write("qwerty\n");18 break;19 }20 return 0;21 }
15/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ESTRUTURAS DE CONTROLEREPETICAO: COMANDO FOR
1 import io;2
3 function main(): int {4 int n;5 read("%d", &n);6 for (int i = 0; i < n; i++) {7 write("%d ", 2 * (i + 1));8 }9 write("\n");
10 return 0;11 }
16/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ESTRUTURAS DE CONTROLEREPETICAO: COMANDO FOR-EACH
1 import io;2 import utility.list;3
4 function main(): int {5 list <int> lst;6 lst.add(0);7 lst.add(2);8 lst.add(3);9 lst.add(4);
10
11 foreach (int a : lst) {12 write("%d ", a);13 }14 write("\n");15 return 0;16 }
17/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ESTRUTURAS DE CONTROLEREPETICAO: COMANDO WHILE
1 import io;2
3 function main(): int {4 int n;5 read("%d", &n);6 int i = 0;7 while(i < n) {8 ++i;9 write("%d ", 2 * i);
10 }11 write("\n");12 return 0;13 }
18/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ESTRUTURAS DE CONTROLEREPETICAO: COMANDO DO-WHILE
1 import io;2
3 function main(): int {4 int i = 5;5 do {6 write("%d ", i);7 i--;8 } while (i != 0);9 write("\n");
10 return 0;11 }
19/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ESTRUTURAS DE CONTROLETRATAMENTO DE EXCECOES
1 procedure g() {2 int x;3 write("Digite um numero positivo: \n");4 try {5 read(x);6 if(x < 0){7 throw x;8 }9 } catch(int erro) {
10 write("Erro! numero negativo: %i \n", erro);11 }12 }
20/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
SUBPROGRAMAS
1 function fib(int n): int {2 if (n == 0 || n == 1) return n;3 else4 return fib(n - 1) + fib(n - 2);5 }
1 procedure printTest() {2 write("Opa...aprendi C+-!");3 }
21/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
LINGUAGEM FUNCIONALDIFERENCAS MARCANTES DO PARADIGMA IMPERATIVO
I Linguagems de programacao funcional tratamcomputacoes como avaliacoes matematicas.
I Nao usa variaveis ou instrucoes de atribuicao.I Programas sao definicoes e aplicacoes de funcoes.I Simplificacao da semantica.
22/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
SISTEMA DE TIPOS
I Praticamente todos os tipos primitivos permanecerao.I Os tipos compotos serao representados pela tupla.
23/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
EXPRESSOES DA LINGUAGEM
I Os operadores aritmeticos permanecem da mesma forma.I O incremento e decremento serao definidos como funcoes
primitivas.
1 (int, float, string)
24/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ESCOPO E TEMPO DE VIDA
I Comportamento de funcoes matematicas.I Escopo das variaveis e estatico.I Seu resultado nao deve ser afetado pelo contexto em que a
funcao foi chamada.
25/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ARRAYS
I Arrays foram substituidos por Listas.I Avaliacao preguicosa, evita calculos desnecessarios e
permite construir estruturas infinitas.
26/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ESTRUTURAS DE CONTROLE
I As estruturas condicionais se resumem em uma mescla docomportamento do switch-case com a avaliacao decondicoes de guarda do if.
I Estruturas de repeticao interativas deixaram de existir.I Alteradores de fluxo (jumps e escapes) tambem serao
eliminados.
27/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ESTRUTURAS DE CONTROLE
1 //Exemplo Imperativo2 function ehPrimo(int n) : bool {3 int i=2;4 while(i*i){5 if(i%n==0) return false;6 i++;7 }8 return true;9 }
10
11 //Exemplo Funcional12 function ehPrimo n : int -> bool13 ehPrimoAux(2,n)14
15 function ehPrimoAux i, n : int, int16 {i*i>n, true}17 {i%n == 0, false}18 ehPrimoAux i+1, n
28/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
LINGUAGEM LOGICADIFERENCAS MARCANTES DO PARADIGMA IMPERATIVO
I Trabalha com regras e fatosI Variaveis nao sao blocos de memoriaI O programador se preocupa em descrever o problema, e
nao sua solucaoI Utiliza backtracking para tentar unificar as variaveis
29/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
TIPOS PRIMITIVOS
I Nao havera ponteirosI Nao existirao blocos de memoria visıveis ao programador
I unsigned e string serao substituıdos por symbol
30/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
TIPOS COMPOSTOS
I Usuarios poderao definir predicados compostosI Exemplo:#predicado simplesgosta(gabriel, lpcp).
#predicado compostogosta(gabriel, disciplina(lpcp)).
31/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ESCOPO
I Fatos sao visıveis globalmenteI Variaveis sao visıveis apenas dentro da regra onde estao
instanciadas
32/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
OPERADORES E EXPRESSOES
I Operadores aritmeticos e logicos permanecem inalteradosI Excecao: operador ‘=’ e utilizado para unificacao, apenasI Utiliza-se ‘is’ para atribuicaoI Exemplo:tenta_unificar(X,Y) :- X = Y.atribuir(X, Y) :- X is Y + 3.
33/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ARMAZENAMENTO DE VALORES
I Fatos sao armazenados em modelo estaticoI Variaveis sao armazenadas em modelo dinamico em pilha
I Devido ao seu uso no backtracking, cujo comportamento erecursivo
34/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ARRAYS
I Definidos como listas ligadasI Representadas como [H|T]
I H e o primeiro elemento da lista e T seu restante (e.g.:[1, 2, 3] seria [1|[2, 3]])
I Exemplos:somatorio([], 0).somatorio([H|T], X) :- somatorio(T, Y), X is H + Y.
35/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
ESTRUTURAS DE CONTROLE
I Nao existirao estruturas de controle e fluxo como if-else ewhile
I Para utilizar estes recursos, deve-se utilizar metodoslogicos e recursao
I Comando “!” (cut) utilizado para interromper o processode resolucao e impedir lacos infinitos
36/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
EXEMPLO DE PROGRAMA
#numero de elementos de uma listanum_elements([], 0).num_elements([_|T], X) :- num_elements(T, Y), X is 1 + Y.
37/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
EXEMPLO DE PROGRAMA
# alguns fatosprogenitor(joao, mario).progenitor(helena, carlos).progenitor(mario, carlos).sexo(jose, ’masculino’).sexo(joao, ’masculino’).sexo(maria, ’feminino’).sexo(ana, ’feminino’).
38/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
EXEMPLO DE PROGRAMA
# diversas relacoes de parentescoirma(X, Y) :- sexo(X, ’feminino’), progenitor(Z, X), progenitor(Z, Y).irmao(X, Y) :- sexo(X, ’masculino’), progenitor(Z, X),progenitor(Z, Y).mae(X, Y) :- sexo(X, ’feminino’), progenitor(X, Y).pai(X, Y) :- sexo(X, ’masculino’), progenitor(X, Y).avo(X, Y) :- sexo(X, ’masculino’), progenitor(X, Z), progenitor(Z, Y).tio(X, Y) :- irmao(X, Z), progenitor(Z, Y).
descendente(X, Y) :- progenitor(Y, X).descendente(X, Y) :- progenitor(Y, Z), descendente(X, Z).
39/40
INTRODUCAO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM LOGICA
FIMDuvidas?
40/40