Click here to load reader

Standard ML / CPN ML

  • View
    1.533

  • Download
    2

Embed Size (px)

DESCRIPTION

Conceitos da linguagem ML (apresentação utilizada durante a disciplina "Modelagem e Validação usando Redes de Petri", do mestrado em Ciência da Computação)

Text of Standard ML / CPN ML

  • 1. Standard ML e CPN ML Modelagem e Validao de Sistemas Usando Redes de Petri Professor: Jorge Abrantes Aluno: Dalton Czane

2. Programao funcional e SML Funes so valores de primeira ordem e so tratadas como tipos bsicos; Computao realizada atravs da avaliao das expresses, no pela seqncia de passos fazendo modificaes em referncias de memria (programao imperativa); Polimorfismo; Recurso ao invs de iteraes; 3. Programao funcional e SML Tipos determinados em tempo de compilao (fortemente tipada); Possui garbage collection (limpa memria); Avaliao dos parmetros antes da avaliao da funo; Meta programming Language; Aplicaes: verificao e lgica aplicada (prova de teoremas), anlise de programas, e compiladores avanados. 4. Compilador SML/NJ Prompt loop, lendo, avaliando e exibindo: 5. Tipos primitivos Int; IntInf; Boolean; Real; Char; String; List; TextIO. 6. Constantes Inteiros: Reais: 7. Constantes Booleans: Strings: Caracteres: 8. Operadores Aritmticos: +, -, *, / (diviso de reais), div, mod, ~; String: ^ (concatenao); Relacionais: =, >, =, ). 17. Funes Exemplos... Funes possuem maior precedncia que operadores aritmticos; Sobrecarga do operador *: 18. Funes O binding do valor ao qual uma varivel refere pode ser determinado estaticamente antes do programa ser executado (lexically scoped). Exemplo: fun addx(y) = y + x; 19. Funes recursivas Recurso usado ao invs de iteraes; Lgica da recurso: caso base + passos indutivos com menores parmetros; Expresses de parmetros so avaliadas antes de serem passadas para a funo. Obs.: A funo reverse polimrfica (mas apresenta problema com lista de reais). 20. Recurso mtua SML suporta funes mutuamente recursivas; Funes mutuamente recursivas so agrupadas com o and. 21. Casamento de padro Casamento de padro nos parmetros das funes; A forma de uma funo definida por padres: fun (padro1)= | (padro2) = ... | (padron) = 22. Casamento de padro Elimina grande parte dos ifs; Merge de duas listas ordenadas: Pode explicitar o casamento de padro com o as: 23. Casamento de padro O smbolo _ pode ser usado para denotar uma varivel annima; Com o uso deste smbolo, pode-se evitar a repetio de variveis: 24. Expresso case Generalizao da expresso if-then-else; Forma: case E of => | => ... | => 25. Expresso case Exemplos: Obs.: O lado direito das expresses devem ser do mesmo tipo, assim como os valores resultantes da expresso if. 26. CPN ML Uma extenso de Standard ML; Facilita o uso da linguagem para quem no tem prtica com SML (tipos = cores); Permite declarao de variveis tipadas; Permite declarao de variveis por referncia, que no caracterstica funcional. 27. Declaraes Colour Sets Unit colset nome = unit [with new_unit]; colset U = unit; colset E = unit with e; Boolean colset nome = bool [with (new_false, new_true)]; colset B = bool; (Operaes: not, andalso, orelse) colset B2 = bool with (no, yes); Integer colset nome = int [with int-exp1..int-exp2]; colset I = int; colset I2 = int with 0..9; Operadores: ~, +, -, *, div, mod, abs, Int.min(i1,i2), Int.max(i1,i2). 28. Declaraes Colour Sets String colset nome = string [with string- exp1..string-exp2 [and int-exp1..int-exp2]]; colset lowerstring = string with a .. z and 1..3; Operaes: s1^s2, String.size s, substring(s, i, len), explode s, implode l Enumerated colset nome = with id0|id1| | idn; colset dwarfs = Dopey | Doc | Sleepy | Bashful | Happy | Grumpy | Sneezy; Index colset nome = index id with int1..int2; colset ALUNO = index aluno with 1..11; 29. Compondo Colour Sets Product colset nome = product nome1*nome2*...*nomen; colset CASAIS = product HOMEM * MULHER; Operaes: #i (extrai elemento i da tupla), _ (omite elemento - ex. (Bob,_) No permitido em CPN). Record colset nome = record id1:nome1 * id2:nome2 * ... * idn:nomen; colset ID = record n:NOME, s:SOBRENOME, i:IDADE; Operaes: #idi rec (extrai elemento idi do record rec: ex: #s rec), (omite elemento - No permitido em CPN). 30. Compondo Colour Sets Lists colset nome = list nome0 [with int1..int2]; colset MinhaLista = list INT with 1..3; Union colset nome = union id1[:nome1] + id2[:nome2] + ... + idn[:nomen]; colset Digito = int with 0..9; colset Uniao = union NUM:Digito + NONE; 31. Compondo Colour Sets Subset colset nome = subset nom0 by subset- function; ou colset nome = subset nom0 with subset-list; fun even i = ((i mod 2) = 0); colset evenInt = subset INT by even; colset int2to4 = subset INT with [2,3,4]; Alias colset nome = nome0; colset Naturais = POSINT; 32. Variveis, constantes e referncias var id1[, id2, , idn]: tipo; var x: int; val id = exp; val maxValor = 5; globref id = exp; globref i = 10; Operaes: !a contedo da r.v. a a := b atribui o valor b to r.v. a ref b reference constructor inc a/dec a in-/decrementa o valor int da r.v. a 33. Funes fun id pat1 = exp1 id pat2 = exp2 ... id patn = expn; fun ehPos(x) = (x>0); fun diff(x,y) = (xy); fun Divide(x,y) = (x div y) Divide(_,0) = error; 34. Declaraes locais let val pat1=exp1; val pat2=exp2; val patn=expn; in exp; end; let fator=5; in mult(num, fator); end; 35. Estruturas de controle if boolexp then exp1 else exp2 case exp of pat1 => exp1 pat2 => exp2 patn => expn; 36. Multi-sets Construtor: `; Sintaxe: i`c (i no-negativo, c cor tipo); Adio e subtrao de multi-sets; 3`true++2`false (3 instncias true + 2 false); 37. Multi-sets - Operaes empty define um multi-set vazio; == igualdade; desigualdade; >> maior que (>>= ou igual a)