Final presentation of proposal language

119 views

Published on

Final presentation of proposal language

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
119
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Final presentation of proposal language

  1. 1. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAProjeto de especificac¸˜ao da linguagem C+-Caio Santos, Gabriel Valsiljevic, Jean Silva, Victor HenriqueUniversidade Federal do Rio Grande do NorteCentro de Ciˆencias Exatas e da TerraDepartamento de Inform´atica e Matem´atica Aplicada4 de junho de 20131/40
  2. 2. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICACONTE ´UDOINTRODUC¸ ˜AOLINGUAGEM IMPERATIVADom´ınio de Aplicac¸˜aoPrincipais caracter´ısticasSistema de TiposTipos PrimitivosDesignadores dos tipos primitivosTipos compostosExpress˜oes da LinguagemEntrada e Sa´ıdaEstruturas de ControleLINGUAGEM FUNCIONALDiferenc¸as marcantes do paradigma imperativoSistema de TiposExpress˜oes da LinguagemEscopo e Tempo de VidaArraysEstruturas de controleLINGUAGEM L ´OGICADiferenc¸as marcantes do paradigma imperativoTiposEscopoOperadores e express˜oesArmazenamento de valoresArraysEstruturas de controle2/40
  3. 3. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICADOM´INIO DE APLICAC¸ ˜AOLinguagem baseada em C e FORTRANDom´ınio de aplicac¸˜ao cient´ıficoEstruturas de dados simplesManipulac¸˜ao de grandes quantidades de dadosAlta precis˜aoPublico alvoMatem´aticos e cientistas3/40
  4. 4. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAPRINCIPAIS CARACTER´ISTICASLegibilidadePequeno n´umero de componentes b´asicos (simplicidadeglobal)Nomes (designadores) dos tipos primitivos refletem bemsuas finalidades. Ex.: int ≡ inteiro´E case sensitveConfiabilidade´E fortemente tipadaOferece mecanismos de tratamento de excec¸ ˜oesCapacidade de escrita´E pouca ortogonalSistema de implementac¸˜ao: compiladaUsa compilac¸˜ao separada4/40
  5. 5. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICASISTEMA DE TIPOSA linguagem ´e fortemente tipadaCompatibilidade entre tiposCompatibilidade de nomes e estruturas ser˜ao usados5/40
  6. 6. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICATIPOS PRIMITIVOSTabela: Designadores dos tipos primitivos da linguagemNome Descri¸c˜ao Tamanho Faixachar Caractere 1byte −128 a 127 e unsigned: 0 a 255short Inteiro curto 2bytes −32768 a 32767 e unsigned: 0 `a 65535int Inteiro 4bytes −2147483648 a 2147483647 e unsigned: 0`a 4294967295long 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 ± 38double Precis˜ao dupla doponto flutuante8bytes ±1.7e ± 308complex N´umeros comple-xos8bytes −264 `a 264 − 16/40
  7. 7. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICATIPOS COMPOSTOSConjunto (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 */7/40
  8. 8. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICATIPOS COMPOSTOSConjunto (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 */Lista (List)1 import utility.list;2 ...3 list <int> a;4 list < list <int> > b;7/40
  9. 9. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICATIPOS COMPOSTOSPilha (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("%dn", mystack.top());8/40
  10. 10. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICATIPOS COMPOSTOSPilha (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("%dn", mystack.top());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: %dn", myqueue.front(), myqueue.back());7 myqueue.pop_front();8/40
  11. 11. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICATIPOS COMPOSTOSVetor1 int v[10];2 int vet[3] = {1, 2, 3};3 int mat[2][2] = {1, 0;4 0, 1};9/40
  12. 12. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICATIPOS COMPOSTOSVetor1 int v[10];2 int vet[3] = {1, 2, 3};3 int mat[2][2] = {1, 0;4 0, 1};O usu´ario pode desejar definir seus pr´oprios tipos1 struct ListaT {2 int info;3 ListaT * prox;4 };5 ...9/40
  13. 13. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAEXPRESS ˜OES DA LINGUAGEMOperador Descric¸˜aoOperadores Aritim´eticos+ adic¸˜ao- subtrac¸˜ao* multiplicac¸˜ao/ divis˜ao% mod ou resto de divis˜aoIncremento e Decremento++ incremento– decrementoOperadores Relacionais== Igualdade!= Diferenc¸a>, < maior que, e menor que>=, <= maior igual, e menor igual10/40
  14. 14. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAEXPRESS ˜OES DA LINGUAGEMOperador Descric¸˜aoOperadores L´ogicos! NOT&& AND|| OROperadores bit-a-bit& AND| ORˆ XOR˜ NOT11/40
  15. 15. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICATIPOS DEFINIDOS PELO USU ´ARIODefinic¸˜ao1 template <typedef struct T>2 typedef struct Par {3 T a, b;4 };56 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
  16. 16. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAENTRADA E SA´IDA1 import io;23 function main(): int {4 int a, b;5 read("%i %i", &a, &b);6 int soma = a + b;7 write("%in", soma);8 return 0;9 }13/40
  17. 17. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAESTRUTURAS DE CONTROLECONDICIONAL: COMANDO IF1 import io;23 function main(): int {4 int n;5 read("%d", &n);6 if (n > 0) {7 write("%d eh um numero positivon", n);8 } else if(n < 0){9 write("%d eh um numero negativon", n);10 } else {11 write("%d eh zeron", n);12 }13 return 0;14 }14/40
  18. 18. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAESTRUTURAS DE CONTROLECONDICIONAL: COMANDO SWITCH-CASE1 import io;23 function main(): int {4 string op;5 read("%s", &op);6 switch(op) {7 case "um":8 write("1n");9 break;10 case "dois":11 write("2n");12 break;13 case "tres":14 write("3n");15 break;16 default:17 write("qwertyn");18 break;19 }20 return 0;21 }15/40
  19. 19. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAESTRUTURAS DE CONTROLEREPETIC¸ ˜AO: COMANDO FOR1 import io;23 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
  20. 20. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAESTRUTURAS DE CONTROLEREPETIC¸ ˜AO: COMANDO FOR-EACH1 import io;2 import utility.list;34 function main(): int {5 list <int> lst;6 lst.add(0);7 lst.add(2);8 lst.add(3);9 lst.add(4);1011 foreach (int a : lst) {12 write("%d ", a);13 }14 write("n");15 return 0;16 }17/40
  21. 21. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAESTRUTURAS DE CONTROLEREPETIC¸ ˜AO: COMANDO WHILE1 import io;23 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
  22. 22. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAESTRUTURAS DE CONTROLEREPETIC¸ ˜AO: COMANDO DO-WHILE1 import io;23 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
  23. 23. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAESTRUTURAS DE CONTROLETRATAMENTO DE EXCEC¸ ˜OES1 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
  24. 24. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICASUBPROGRAMAS1 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
  25. 25. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICALINGUAGEM FUNCIONALDIFERENC¸ AS MARCANTES DO PARADIGMA IMPERATIVOLinguagems de programac¸˜ao funcional tratamcomputac¸oes como avaliac¸ ˜oes matem´aticas.N˜ao usa vari´aveis ou instruc¸ ˜oes de atribuic¸˜ao.Programas s˜ao definic¸ ˜oes e aplicac¸ ˜oes de func¸ ˜oes.Simplificac¸˜ao da semˆantica.22/40
  26. 26. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICASISTEMA DE TIPOSPraticamente todos os tipos primitivos permanecer˜ao.Os tipos compotos ser˜ao representados pela tupla.23/40
  27. 27. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAEXPRESS ˜OES DA LINGUAGEMOs operadores aritm´eticos permanecem da mesma forma.O incremento e decremento ser˜ao definidos como func¸ ˜oesprimitivas.1 (int, float, string)24/40
  28. 28. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAESCOPO E TEMPO DE VIDAComportamento de func¸ ˜oes matem´aticas.Escopo das vari´aveis ´e est´atico.Seu resultado n˜ao deve ser afetado pelo contexto em que afunc¸˜ao foi chamada.25/40
  29. 29. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAARRAYSArrays foram substituidos por Listas.Avaliac¸˜ao preguic¸osa, evita c´alculos desnecess´arios epermite construir estruturas infinitas.26/40
  30. 30. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAESTRUTURAS DE CONTROLEAs estruturas condicionais se resumem em uma mescla docomportamento do switch-case com a avaliac¸˜ao decondic¸ ˜oes de guarda do if.Estruturas de repetic¸˜ao interativas deixaram de existir.Alteradores de fluxo (jumps e escapes) tamb´em ser˜aoeliminados.27/40
  31. 31. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAESTRUTURAS DE CONTROLE1 //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 }1011 //Exemplo Funcional12 function ehPrimo n : int -> bool13 ehPrimoAux(2,n)1415 function ehPrimoAux i, n : int, int16 {i*i>n, true}17 {i%n == 0, false}18 ehPrimoAux i+1, n28/40
  32. 32. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICALINGUAGEM L ´OGICADIFERENC¸ AS MARCANTES DO PARADIGMA IMPERATIVOTrabalha com regras e fatosVari´aveis n˜ao s˜ao blocos de mem´oriaO programador se preocupa em descrever o problema, en˜ao sua soluc¸˜aoUtiliza backtracking para tentar unificar as vari´aveis29/40
  33. 33. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICATIPOS PRIMITIVOSN˜ao haver´a ponteirosN˜ao existir˜ao blocos de mem´oria vis´ıveis ao programadorunsigned e string ser˜ao substitu´ıdos por symbol30/40
  34. 34. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICATIPOS COMPOSTOSUsu´arios poder˜ao definir predicados compostosExemplo:#predicado simplesgosta(gabriel, lpcp).#predicado compostogosta(gabriel, disciplina(lpcp)).31/40
  35. 35. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAESCOPOFatos s˜ao vis´ıveis globalmenteVari´aveis s˜ao vis´ıveis apenas dentro da regra onde est˜aoinstanciadas32/40
  36. 36. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAOPERADORES E EXPRESS ˜OESOperadores aritm´eticos e l´ogicos permanecem inalteradosExcec¸˜ao: operador ‘=’ ´e utilizado para unificac¸˜ao, apenasUtiliza-se ‘is’ para atribuic¸˜aoExemplo:tenta_unificar(X,Y) :- X = Y.atribuir(X, Y) :- X is Y + 3.33/40
  37. 37. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAARMAZENAMENTO DE VALORESFatos s˜ao armazenados em modelo est´aticoVari´aveis s˜ao armazenadas em modelo dinˆamico em pilhaDevido ao seu uso no backtracking, cujo comportamento ´erecursivo34/40
  38. 38. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAARRAYSDefinidos como listas ligadasRepresentadas como [H|T]H ´e o primeiro elemento da lista e T seu restante (e.g.:[1, 2, 3] seria [1|[2, 3]])Exemplos:somatorio([], 0).somatorio([H|T], X) :- somatorio(T, Y), X is H + Y.35/40
  39. 39. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAESTRUTURAS DE CONTROLEN˜ao existir˜ao estruturas de controle e fluxo como if-else ewhilePara utilizar estes recursos, deve-se utilizar m´etodosl´ogicos e recurs˜aoComando “!” (cut) utilizado para interromper o processode resoluc¸˜ao e impedir lac¸os infinitos36/40
  40. 40. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAEXEMPLO DE PROGRAMA#numero de elementos de uma listanum_elements([], 0).num_elements([_|T], X) :- num_elements(T, Y), X is 1 + Y.37/40
  41. 41. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAEXEMPLO 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
  42. 42. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAEXEMPLO 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
  43. 43. INTRODUC¸ ˜AO LINGUAGEM IMPERATIVA LINGUAGEM FUNCIONAL LINGUAGEM L ´OGICAFIMD´uvidas?40/40

×