SlideShare ist ein Scribd-Unternehmen logo
1 von 46
Standard ML e CPN ML
Modelagem e Validação de Sistemas
Usando Redes de Petri
Professor: Jorge Abrantes
Aluno: Dalton Cézane
Programação funcional e SML
• Funções são valores de primeira ordem e
são tratadas como tipos básicos;
• Computação realizada através da
avaliação das expressões, não pela
seqüência de passos fazendo
modificações em referências de memória
(programação imperativa);
• Polimorfismo;
• Recursão ao invés de iterações;
Programação funcional e SML
• Tipos determinados em tempo de compilação
(fortemente tipada);
• Possui garbage collection (limpa memória);
• Avaliação dos parâmetros antes da avaliação da
função;
• Meta programming Language;
• Aplicações: verificação e lógica aplicada (prova
de teoremas), análise de programas, e
compiladores avançados.
Compilador SML/NJ
• Prompt  loop, lendo, avaliando e
exibindo:
Tipos primitivos
• Int;
• IntInf;
• Boolean;
• Real;
• Char;
• String;
• List;
• TextIO.
Constantes
Inteiros:
Reais:
Constantes
Booleans:
Strings:
Caracteres:
Operadores
• Aritméticos: +, -, *, / (divisão de reais), div,
mod, ~;
• String: ^ (concatenação);
• Relacionais: =, >, <, >=, <=, <>
• Lógicos: andalso, orelse, not
• Exemplos...
Expressão condicional IF
• Sintaxe: if A then B else C
• Obrigatoriamente usa-se o else
Consistência de tipos
• Sempre um único tipo é associado a toda
expressão;
• Exemplo:
– Aplicando um operador a um tipo errado;
– Aplicando um operador a tipos mistos.
Coerção entre tipos
• Entre inteiros e reais (real);
• Entre caracteres e inteiros (ord e chr);
• Entre caracteres e strings (str);
Declarações de variáveis
• val <identificador> = <expressão>;
• Variáveis podem ser redeclaradas e não
precisam ser do mesmo tipo;
• Exemplo...
Tuplas
• Importante para construção de tipos complexos;
• Construídas através de uma lista não vazia de
expressões de algum tipo, separadas por
vírgula, entre parêntes: (E1, E2, E3, ..., Em);
• O tipo de uma tupla é um produto: tipo[E1] *
tipo[E2] * ... * tipo[En];
• Para obter o i-ésimo componente de uma tupla:
#i(tupla).
Listas
• Também importantes, como tuplas, para
tipos complexos;
• Construídas com uma lista de expressões
do mesmo tipo, separadas por vírgulas,
entre colchetes: [E1, E2, ..., En];
• O tipo de uma lista é:
“tipoDasExpressões” list;
• Notações e operadores: [], nil, hd, tl, @, ::
String x list x char
• explode(“string”);
• implode([#”char1”, #”char2”,..., #”charn”]);
• concat([“a”, “bcd”, “ef”])
Funções
• Linguagem funcional: definição de
funções e aplicação destas a parâmetros;
• Declaração: fun <identificador>(<lista de
parâmetros>) = <expressão>;
• Aplicação de função: <identificador>(lista
de parâmetros>).
Funções
• Exemplos...
• Funções possuem maior precedência que
operadores aritméticos;
• Sobrecarga do operador *:
Funções
• O binding do valor ao qual uma variável
refere pode ser determinado
estaticamente antes do programa ser
executado (lexically scoped).
• Exemplo: fun addx(y) = y + x;
Funções recursivas
• Recursão é usado ao invés de iterações;
• Lógica da recursão: caso base + passos
indutivos com “menores” parâmetros;
• Expressões de parâmetros são avaliadas antes
de serem passadas para a função.
• Obs.: A função reverse é polimórfica (mas
apresenta problema com lista de reais).
Recursão mútua
• SML suporta funções mutuamente
recursivas;
• Funções mutuamente recursivas são
agrupadas com o “and”.
Casamento de padrão
• Casamento de padrão nos parâmetros
das funções;
• A forma de uma função definida por
padrões:
fun
<identificador>(padrão1)=<expressão1>
| <identificador> (padrão2) = <expressão2>
...
|<identificador> (padrãon) = <expressãon>
Casamento de padrão
• Elimina grande parte dos “if”s;
• Merge de duas listas ordenadas:
• Pode explicitar o “casamento de padrão”
com o “as”:
Casamento de padrão
• O símbolo _ pode ser usado para denotar
uma variável anônima;
• Com o uso deste símbolo, pode-se evitar
a repetição de variáveis:
Expressão case
• Generalização da expressão if-then-else;
• Forma: case E of
<padrão1> => <expressão1>
| <padrão2> => <expressão2>
...
| <padrãon> => <expressãon>
Expressão case
• Exemplos:
Obs.: O lado direito das expressões devem ser do mesmo
tipo, assim como os valores resultantes da expressão if.
CPN ML
• Uma extensão de Standard ML;
• Facilita o uso da linguagem para quem
não tem prática com SML (tipos = cores);
• Permite declaração de variáveis “tipadas”;
• Permite declaração de variáveis por
“referência”, que não é característica
funcional.
Declarações – 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; (Operações: 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).
Declarações – 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;
– Operações: 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;
Compondo Colour Sets
• Product  colset nome = product nome1*nome2*...*nomen;
– colset CASAIS = product HOMEM * MULHER;
– Operações: #i (extrai elemento “i” da tupla), _ (omite
elemento - ex. (Bob,_) – Não permitido em CPN).
• Record  colset nome = record id1:nome1 *
id2:nome2 * ... * idn:nomen;
– colset ID = record n:NOME, s:SOBRENOME,
i:IDADE;
– Operações: #idi rec (extrai elemento idi do
record rec: ex: #s rec), … (omite elemento
- Não permitido em CPN).
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;
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;
Variáveis, constantes e referências
• var id1[, id2, …, idn]: tipo;
– var x: int;
• val id = exp;
– val maxValor = 5;
• globref id = exp;
– globref i = 10;
– Operações:
• !a conteúdo 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
Funções
• fun id pat1 = exp1
id pat2 = exp2
...
id patn = expn;
– fun ehPos(x) = (x>0);
– fun diff(x,y) = (x<>y);
– fun Divide(x,y) = (x div y)
Divide(_,0) = error;
Declarações locais
let
val pat1=exp1;
val pat2=exp2;
…
val patn=expn;
in
exp;
end;
let
fator=5;
in
mult(num, fator);
end;
Estruturas de controle
• if boolexp then
exp1
else
exp2
• case exp of
pat1 => exp1
pat2 => exp2
…
patn => expn;
Multi-sets
• Construtor: `;
• Sintaxe: i`c (i não-negativo, c é cor – tipo);
– “Adição” e “subtração” de multi-sets;
– 3`true++2`false (3 instâncias true + 2 false);
Multi-sets - Operações
empty  define um multi-set vazio;
==  igualdade;
<><>  desigualdade;
>>  maior que (>>= ou igual a)
<<  menor que (<<= ou igual a)
++  adição
--  subtração
**  multiplicação escalar
Multi-sets - Operações
size ms  tamanho
random ms  retorna uma cor pseudo-radômica
cf(c, ms)  retorna o n° de itens da cor c em ms
filter p ms  filtra ms pelo predicado p
ext_col f ms  pega i1`c1++…++in`cn e retorna
i1`f(c1)++…++in`f(cn)
ext_ms f ms  pega i1`c1++…++in`cn e retorna
i1*f(c1)++…++in*f(cn)
ms_to_col ms  retorna um multi-set de tamanho 1 como
um elemento simples em ms (size ms=1,
raises no_singleton exception)
Inscrições
Nome
[Initial Marking[@+Delay]]
Cor (tipo)
Inscrições de lugares
Início
INT
1`0 ++ 1`1 ++ 1`2
1`0++
1`1++
1`2 3
Início
INT
(1`0 ++ 1`1 ++ 1`2)@+3
1`0@3++
1`1@3++
1`2@3 3
Incrições de transições
Nome
[Guarda] [Delay]
[Código]
Incrições de transições
Par
m>0 @+2
input(m)
output(n,b)
let
val par = (m mod 2)=0
in
(m+1,par)
end;
Numero Resultado
m
n
b
INT BOOL
3
Inscrições de arcos
ParNumero Resultado
m b
INT BOOL
3
1`3
1
m é “vinculado a 3
ParNumero Resultadom b
INT
1`3++1`5
1`3++
1`5
2
m é “livre” (3 ou 5)
BOOL
Inscrições de arcos
ParNumero Resultadom b@+2
INT
BOOL
1`3++1`5
1`3++
1`5
2
Delay: arco de saída tem delay 2
ParNumero Resultadom@+2 b
INT BOOL
(1`3++
1`5)@+6
1`3@6++
1`5@6
2
Preemptying time stamps (on input
arcs):
“Par” can use tokens from “Numero”
• Incrições de arcos não podem:
– conter I/O ou usar comandos;
– atualizar ou usar variáveis de referências;
– usar funções randômicas. (CPNTools não checa isto)
ParNumero Resultadom if par m
then 1`true
else 1`false
INT BOOL
1`3++1`5
1`3++
1`5
2
Referências
• http://wiki.daimi.au.dk/cpntools-help/cpn_ml.wiki
• Standard ML Programming for
Design/CPN Users
• Introduction to Standard ML

Weitere ähnliche Inhalte

Was ist angesagt?

Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01thomasdacosta
 
Tutorial - Criando Banco com MySQL Workbench
Tutorial - Criando Banco com MySQL WorkbenchTutorial - Criando Banco com MySQL Workbench
Tutorial - Criando Banco com MySQL WorkbenchDaniel Brandão
 
Matemática Discreta - Parte IV teoria dos-conjuntos
Matemática Discreta - Parte IV teoria dos-conjuntosMatemática Discreta - Parte IV teoria dos-conjuntos
Matemática Discreta - Parte IV teoria dos-conjuntosUlrich Schiel
 
01 introdução à algebra relacional
01   introdução à algebra relacional01   introdução à algebra relacional
01 introdução à algebra relacionalcharlesoliveira13
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosLeonardo Melo Santos
 
Aula 7 expressão regular
Aula 7   expressão regularAula 7   expressão regular
Aula 7 expressão regularwab030
 
Aula 4 linguagens regularese automatosfinitosdeterministicos
Aula 4   linguagens regularese automatosfinitosdeterministicosAula 4   linguagens regularese automatosfinitosdeterministicos
Aula 4 linguagens regularese automatosfinitosdeterministicoswab030
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)Janynne Gomes
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Leinylson Fontinele
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
O caixeiro viajante é np completo
O caixeiro viajante é np completoO caixeiro viajante é np completo
O caixeiro viajante é np completoMarcelo Carvalho
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoDelacyr Ferreira
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 

Was ist angesagt? (20)

Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01
 
Tutorial - Criando Banco com MySQL Workbench
Tutorial - Criando Banco com MySQL WorkbenchTutorial - Criando Banco com MySQL Workbench
Tutorial - Criando Banco com MySQL Workbench
 
Matemática Discreta - Parte IV teoria dos-conjuntos
Matemática Discreta - Parte IV teoria dos-conjuntosMatemática Discreta - Parte IV teoria dos-conjuntos
Matemática Discreta - Parte IV teoria dos-conjuntos
 
01 introdução à algebra relacional
01   introdução à algebra relacional01   introdução à algebra relacional
01 introdução à algebra relacional
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
Aula 7 expressão regular
Aula 7   expressão regularAula 7   expressão regular
Aula 7 expressão regular
 
Aula 4 linguagens regularese automatosfinitosdeterministicos
Aula 4   linguagens regularese automatosfinitosdeterministicosAula 4   linguagens regularese automatosfinitosdeterministicos
Aula 4 linguagens regularese automatosfinitosdeterministicos
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
 
Jad: o método
Jad: o métodoJad: o método
Jad: o método
 
Visualg
VisualgVisualg
Visualg
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Linguagem C 06 Funcoes
Linguagem C 06 FuncoesLinguagem C 06 Funcoes
Linguagem C 06 Funcoes
 
Paa algoritmos gulosos
Paa  algoritmos gulososPaa  algoritmos gulosos
Paa algoritmos gulosos
 
Circuitos digitais: Comparador
Circuitos digitais: ComparadorCircuitos digitais: Comparador
Circuitos digitais: Comparador
 
O caixeiro viajante é np completo
O caixeiro viajante é np completoO caixeiro viajante é np completo
O caixeiro viajante é np completo
 
003 - JavaFX Tutorial - Layouts
003 - JavaFX Tutorial - Layouts003 - JavaFX Tutorial - Layouts
003 - JavaFX Tutorial - Layouts
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 

Ähnlich wie Standard ML / CPN ML

Ähnlich wie Standard ML / CPN ML (20)

Unidade7 1
Unidade7 1Unidade7 1
Unidade7 1
 
Python 02
Python 02Python 02
Python 02
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Estrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptxEstrutura de linguagem de programação - Aula 2.pptx
Estrutura de linguagem de programação - Aula 2.pptx
 
Python em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhosPython em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhos
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Henriquecristovao manual c-cpp
Henriquecristovao manual c-cppHenriquecristovao manual c-cpp
Henriquecristovao manual c-cpp
 
Ed1
Ed1Ed1
Ed1
 
01 variaveis io if
01 variaveis io if01 variaveis io if
01 variaveis io if
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordida
 
Haskell
HaskellHaskell
Haskell
 
Fundamentos de C#
Fundamentos de C#Fundamentos de C#
Fundamentos de C#
 
Linguagem_C.pdf
Linguagem_C.pdfLinguagem_C.pdf
Linguagem_C.pdf
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
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
 
Trabalho
TrabalhoTrabalho
Trabalho
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Linguagem lua
Linguagem luaLinguagem lua
Linguagem lua
 

Mehr von Dalton Valadares

Primeiros passos com Openstack
Primeiros passos com OpenstackPrimeiros passos com Openstack
Primeiros passos com OpenstackDalton Valadares
 
Performance Evaluation of an IEEE 802.11g Network in an Industrial Environment
Performance Evaluation of an IEEE 802.11g Network in an Industrial EnvironmentPerformance Evaluation of an IEEE 802.11g Network in an Industrial Environment
Performance Evaluation of an IEEE 802.11g Network in an Industrial EnvironmentDalton Valadares
 
802.11g Signal Strength Evaluation in an Industrial Environment (Elsevier Int...
802.11g Signal Strength Evaluation in an Industrial Environment (Elsevier Int...802.11g Signal Strength Evaluation in an Industrial Environment (Elsevier Int...
802.11g Signal Strength Evaluation in an Industrial Environment (Elsevier Int...Dalton Valadares
 
Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...
Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...
Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...Dalton Valadares
 
Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...
Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...
Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...Dalton Valadares
 
Internet das Coisas e a Indústria 4.0
Internet das Coisas e a Indústria 4.0Internet das Coisas e a Indústria 4.0
Internet das Coisas e a Indústria 4.0Dalton Valadares
 
Achieving Data Dissemination with Security using FIWARE and Intel Software Gu...
Achieving Data Dissemination with Security using FIWARE and Intel Software Gu...Achieving Data Dissemination with Security using FIWARE and Intel Software Gu...
Achieving Data Dissemination with Security using FIWARE and Intel Software Gu...Dalton Valadares
 
Internet das Coisas com Edgex Foundry
Internet das Coisas com Edgex FoundryInternet das Coisas com Edgex Foundry
Internet das Coisas com Edgex FoundryDalton Valadares
 
OPTEE on QEMU - Build Tutorial
OPTEE on QEMU - Build TutorialOPTEE on QEMU - Build Tutorial
OPTEE on QEMU - Build TutorialDalton Valadares
 
Presentation of my paper in the IEEE Symposium on Computer and Communications...
Presentation of my paper in the IEEE Symposium on Computer and Communications...Presentation of my paper in the IEEE Symposium on Computer and Communications...
Presentation of my paper in the IEEE Symposium on Computer and Communications...Dalton Valadares
 
Avaliação de Desempenho de uma Rede 802.11g em uma Usina Termoelétrica
Avaliação de Desempenho de uma Rede 802.11g em uma Usina TermoelétricaAvaliação de Desempenho de uma Rede 802.11g em uma Usina Termoelétrica
Avaliação de Desempenho de uma Rede 802.11g em uma Usina TermoelétricaDalton Valadares
 
Apresentação sobre o modelo de segurança OPC UA
Apresentação sobre o modelo de segurança OPC UAApresentação sobre o modelo de segurança OPC UA
Apresentação sobre o modelo de segurança OPC UADalton Valadares
 
Modelo de segurança OPC UA
Modelo de segurança OPC UAModelo de segurança OPC UA
Modelo de segurança OPC UADalton Valadares
 
Introdução à Gestão de projetos
Introdução à Gestão de projetosIntrodução à Gestão de projetos
Introdução à Gestão de projetosDalton Valadares
 
Integrating Fiware Orion, Keyrock and Wilma
Integrating Fiware Orion, Keyrock and WilmaIntegrating Fiware Orion, Keyrock and Wilma
Integrating Fiware Orion, Keyrock and WilmaDalton Valadares
 
Desenvolvimento Web com JSF
Desenvolvimento Web com JSFDesenvolvimento Web com JSF
Desenvolvimento Web com JSFDalton Valadares
 

Mehr von Dalton Valadares (20)

Primeiros passos com Openstack
Primeiros passos com OpenstackPrimeiros passos com Openstack
Primeiros passos com Openstack
 
Performance Evaluation of an IEEE 802.11g Network in an Industrial Environment
Performance Evaluation of an IEEE 802.11g Network in an Industrial EnvironmentPerformance Evaluation of an IEEE 802.11g Network in an Industrial Environment
Performance Evaluation of an IEEE 802.11g Network in an Industrial Environment
 
802.11g Signal Strength Evaluation in an Industrial Environment (Elsevier Int...
802.11g Signal Strength Evaluation in an Industrial Environment (Elsevier Int...802.11g Signal Strength Evaluation in an Industrial Environment (Elsevier Int...
802.11g Signal Strength Evaluation in an Industrial Environment (Elsevier Int...
 
Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...
Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...
Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...
 
Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...
Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...
Towards 802.11g Signal Strength Estimation in an Industrial Environment: a Pr...
 
Internet das Coisas e a Indústria 4.0
Internet das Coisas e a Indústria 4.0Internet das Coisas e a Indústria 4.0
Internet das Coisas e a Indústria 4.0
 
Achieving Data Dissemination with Security using FIWARE and Intel Software Gu...
Achieving Data Dissemination with Security using FIWARE and Intel Software Gu...Achieving Data Dissemination with Security using FIWARE and Intel Software Gu...
Achieving Data Dissemination with Security using FIWARE and Intel Software Gu...
 
Internet das Coisas com Edgex Foundry
Internet das Coisas com Edgex FoundryInternet das Coisas com Edgex Foundry
Internet das Coisas com Edgex Foundry
 
OPTEE on QEMU - Build Tutorial
OPTEE on QEMU - Build TutorialOPTEE on QEMU - Build Tutorial
OPTEE on QEMU - Build Tutorial
 
Presentation of my paper in the IEEE Symposium on Computer and Communications...
Presentation of my paper in the IEEE Symposium on Computer and Communications...Presentation of my paper in the IEEE Symposium on Computer and Communications...
Presentation of my paper in the IEEE Symposium on Computer and Communications...
 
Avaliação de Desempenho de uma Rede 802.11g em uma Usina Termoelétrica
Avaliação de Desempenho de uma Rede 802.11g em uma Usina TermoelétricaAvaliação de Desempenho de uma Rede 802.11g em uma Usina Termoelétrica
Avaliação de Desempenho de uma Rede 802.11g em uma Usina Termoelétrica
 
Apresentação sobre o modelo de segurança OPC UA
Apresentação sobre o modelo de segurança OPC UAApresentação sobre o modelo de segurança OPC UA
Apresentação sobre o modelo de segurança OPC UA
 
Modelo de segurança OPC UA
Modelo de segurança OPC UAModelo de segurança OPC UA
Modelo de segurança OPC UA
 
Introdução à Gestão de projetos
Introdução à Gestão de projetosIntrodução à Gestão de projetos
Introdução à Gestão de projetos
 
Integrating Fiware Orion, Keyrock and Wilma
Integrating Fiware Orion, Keyrock and WilmaIntegrating Fiware Orion, Keyrock and Wilma
Integrating Fiware Orion, Keyrock and Wilma
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
Programação C - Aula 2
Programação C - Aula 2Programação C - Aula 2
Programação C - Aula 2
 
Programação C - Aula 3
Programação C - Aula 3Programação C - Aula 3
Programação C - Aula 3
 
Programação C - Aula 4
Programação C - Aula 4Programação C - Aula 4
Programação C - Aula 4
 
Desenvolvimento Web com JSF
Desenvolvimento Web com JSFDesenvolvimento Web com JSF
Desenvolvimento Web com JSF
 

Standard ML / CPN ML

  • 1. Standard ML e CPN ML Modelagem e Validação de Sistemas Usando Redes de Petri Professor: Jorge Abrantes Aluno: Dalton Cézane
  • 2. Programação funcional e SML • Funções são valores de primeira ordem e são tratadas como tipos básicos; • Computação realizada através da avaliação das expressões, não pela seqüência de passos fazendo modificações em referências de memória (programação imperativa); • Polimorfismo; • Recursão ao invés de iterações;
  • 3. Programação funcional e SML • Tipos determinados em tempo de compilação (fortemente tipada); • Possui garbage collection (limpa memória); • Avaliação dos parâmetros antes da avaliação da função; • Meta programming Language; • Aplicações: verificação e lógica aplicada (prova de teoremas), análise de programas, e compiladores avançados.
  • 4. Compilador SML/NJ • Prompt  loop, lendo, avaliando e exibindo:
  • 5. Tipos primitivos • Int; • IntInf; • Boolean; • Real; • Char; • String; • List; • TextIO.
  • 8. Operadores • Aritméticos: +, -, *, / (divisão de reais), div, mod, ~; • String: ^ (concatenação); • Relacionais: =, >, <, >=, <=, <> • Lógicos: andalso, orelse, not • Exemplos...
  • 9. Expressão condicional IF • Sintaxe: if A then B else C • Obrigatoriamente usa-se o else
  • 10. Consistência de tipos • Sempre um único tipo é associado a toda expressão; • Exemplo: – Aplicando um operador a um tipo errado; – Aplicando um operador a tipos mistos.
  • 11. Coerção entre tipos • Entre inteiros e reais (real); • Entre caracteres e inteiros (ord e chr); • Entre caracteres e strings (str);
  • 12. Declarações de variáveis • val <identificador> = <expressão>; • Variáveis podem ser redeclaradas e não precisam ser do mesmo tipo; • Exemplo...
  • 13. Tuplas • Importante para construção de tipos complexos; • Construídas através de uma lista não vazia de expressões de algum tipo, separadas por vírgula, entre parêntes: (E1, E2, E3, ..., Em); • O tipo de uma tupla é um produto: tipo[E1] * tipo[E2] * ... * tipo[En]; • Para obter o i-ésimo componente de uma tupla: #i(tupla).
  • 14. Listas • Também importantes, como tuplas, para tipos complexos; • Construídas com uma lista de expressões do mesmo tipo, separadas por vírgulas, entre colchetes: [E1, E2, ..., En]; • O tipo de uma lista é: “tipoDasExpressões” list; • Notações e operadores: [], nil, hd, tl, @, ::
  • 15. String x list x char • explode(“string”); • implode([#”char1”, #”char2”,..., #”charn”]); • concat([“a”, “bcd”, “ef”])
  • 16. Funções • Linguagem funcional: definição de funções e aplicação destas a parâmetros; • Declaração: fun <identificador>(<lista de parâmetros>) = <expressão>; • Aplicação de função: <identificador>(lista de parâmetros>).
  • 17. Funções • Exemplos... • Funções possuem maior precedência que operadores aritméticos; • Sobrecarga do operador *:
  • 18. Funções • O binding do valor ao qual uma variável refere pode ser determinado estaticamente antes do programa ser executado (lexically scoped). • Exemplo: fun addx(y) = y + x;
  • 19. Funções recursivas • Recursão é usado ao invés de iterações; • Lógica da recursão: caso base + passos indutivos com “menores” parâmetros; • Expressões de parâmetros são avaliadas antes de serem passadas para a função. • Obs.: A função reverse é polimórfica (mas apresenta problema com lista de reais).
  • 20. Recursão mútua • SML suporta funções mutuamente recursivas; • Funções mutuamente recursivas são agrupadas com o “and”.
  • 21. Casamento de padrão • Casamento de padrão nos parâmetros das funções; • A forma de uma função definida por padrões: fun <identificador>(padrão1)=<expressão1> | <identificador> (padrão2) = <expressão2> ... |<identificador> (padrãon) = <expressãon>
  • 22. Casamento de padrão • Elimina grande parte dos “if”s; • Merge de duas listas ordenadas: • Pode explicitar o “casamento de padrão” com o “as”:
  • 23. Casamento de padrão • O símbolo _ pode ser usado para denotar uma variável anônima; • Com o uso deste símbolo, pode-se evitar a repetição de variáveis:
  • 24. Expressão case • Generalização da expressão if-then-else; • Forma: case E of <padrão1> => <expressão1> | <padrão2> => <expressão2> ... | <padrãon> => <expressãon>
  • 25. Expressão case • Exemplos: Obs.: O lado direito das expressões devem ser do mesmo tipo, assim como os valores resultantes da expressão if.
  • 26. CPN ML • Uma extensão de Standard ML; • Facilita o uso da linguagem para quem não tem prática com SML (tipos = cores); • Permite declaração de variáveis “tipadas”; • Permite declaração de variáveis por “referência”, que não é característica funcional.
  • 27. Declarações – 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; (Operações: 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. Declarações – 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; – Operações: 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; – Operações: #i (extrai elemento “i” da tupla), _ (omite elemento - ex. (Bob,_) – Não permitido em CPN). • Record  colset nome = record id1:nome1 * id2:nome2 * ... * idn:nomen; – colset ID = record n:NOME, s:SOBRENOME, i:IDADE; – Operações: #idi rec (extrai elemento idi do record rec: ex: #s rec), … (omite elemento - Não 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. Variáveis, constantes e referências • var id1[, id2, …, idn]: tipo; – var x: int; • val id = exp; – val maxValor = 5; • globref id = exp; – globref i = 10; – Operações: • !a conteúdo 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. Funções • fun id pat1 = exp1 id pat2 = exp2 ... id patn = expn; – fun ehPos(x) = (x>0); – fun diff(x,y) = (x<>y); – fun Divide(x,y) = (x div y) Divide(_,0) = error;
  • 34. Declarações 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 não-negativo, c é cor – tipo); – “Adição” e “subtração” de multi-sets; – 3`true++2`false (3 instâncias true + 2 false);
  • 37. Multi-sets - Operações empty  define um multi-set vazio; ==  igualdade; <><>  desigualdade; >>  maior que (>>= ou igual a) <<  menor que (<<= ou igual a) ++  adição --  subtração **  multiplicação escalar
  • 38. Multi-sets - Operações size ms  tamanho random ms  retorna uma cor pseudo-radômica cf(c, ms)  retorna o n° de itens da cor c em ms filter p ms  filtra ms pelo predicado p ext_col f ms  pega i1`c1++…++in`cn e retorna i1`f(c1)++…++in`f(cn) ext_ms f ms  pega i1`c1++…++in`cn e retorna i1*f(c1)++…++in*f(cn) ms_to_col ms  retorna um multi-set de tamanho 1 como um elemento simples em ms (size ms=1, raises no_singleton exception)
  • 40. Inscrições de lugares Início INT 1`0 ++ 1`1 ++ 1`2 1`0++ 1`1++ 1`2 3 Início INT (1`0 ++ 1`1 ++ 1`2)@+3 1`0@3++ 1`1@3++ 1`2@3 3
  • 42. Incrições de transições Par m>0 @+2 input(m) output(n,b) let val par = (m mod 2)=0 in (m+1,par) end; Numero Resultado m n b INT BOOL 3
  • 43. Inscrições de arcos ParNumero Resultado m b INT BOOL 3 1`3 1 m é “vinculado a 3 ParNumero Resultadom b INT 1`3++1`5 1`3++ 1`5 2 m é “livre” (3 ou 5) BOOL
  • 44. Inscrições de arcos ParNumero Resultadom b@+2 INT BOOL 1`3++1`5 1`3++ 1`5 2 Delay: arco de saída tem delay 2 ParNumero Resultadom@+2 b INT BOOL (1`3++ 1`5)@+6 1`3@6++ 1`5@6 2 Preemptying time stamps (on input arcs): “Par” can use tokens from “Numero”
  • 45. • Incrições de arcos não podem: – conter I/O ou usar comandos; – atualizar ou usar variáveis de referências; – usar funções randômicas. (CPNTools não checa isto) ParNumero Resultadom if par m then 1`true else 1`false INT BOOL 1`3++1`5 1`3++ 1`5 2
  • 46. Referências • http://wiki.daimi.au.dk/cpntools-help/cpn_ml.wiki • Standard ML Programming for Design/CPN Users • Introduction to Standard ML