SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

Aula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoAula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoVinícius de Paula
 
Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaDelacyr Ferreira
 
Uml diagrama de sequencia
Uml diagrama de sequenciaUml diagrama de sequencia
Uml diagrama de sequenciaItalo Costa
 
Introdução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHPIntrodução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHPClayton de Almeida Souza
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeRegis Magalhães
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosMarcos Thomaz
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao PythonMarcio Palheta
 
Estimativa de software usando pontos de função
Estimativa de software usando pontos de funçãoEstimativa de software usando pontos de função
Estimativa de software usando pontos de funçãoClaudio Martins
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programaçãorodfernandes
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcionalfabiocerqueira
 
PROJETO DE REDE TELEFONIA MOVEL
PROJETO DE REDE TELEFONIA MOVELPROJETO DE REDE TELEFONIA MOVEL
PROJETO DE REDE TELEFONIA MOVELWELLINGTON MARTINS
 
Abordagem diagnóstica ao paciente crítico com distúrbios respiratórios enfe...
Abordagem diagnóstica ao paciente crítico com distúrbios respiratórios   enfe...Abordagem diagnóstica ao paciente crítico com distúrbios respiratórios   enfe...
Abordagem diagnóstica ao paciente crítico com distúrbios respiratórios enfe...Aroldo Gavioli
 
Aula 1 aed - lógica de programação
Aula 1   aed - lógica de programaçãoAula 1   aed - lógica de programação
Aula 1 aed - lógica de programaçãoElaine Cecília Gatto
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação CGercélia Ramos
 

Tendances (20)

Aula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de ProjetoAula 05 - UML e Padrões de Projeto
Aula 05 - UML e Padrões de Projeto
 
Análise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise AssintóticaAnálise de Algoritmos - Análise Assintótica
Análise de Algoritmos - Análise Assintótica
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Uml diagrama de sequencia
Uml diagrama de sequenciaUml diagrama de sequencia
Uml diagrama de sequencia
 
Introdução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHPIntrodução a Linguagem de Programação PHP
Introdução a Linguagem de Programação PHP
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 Recursividade
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos Comandos
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao Python
 
Estimativa de software usando pontos de função
Estimativa de software usando pontos de funçãoEstimativa de software usando pontos de função
Estimativa de software usando pontos de função
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Algoritmos: Variáveis e Constantes
Algoritmos: Variáveis e ConstantesAlgoritmos: Variáveis e Constantes
Algoritmos: Variáveis e Constantes
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcional
 
Apresentação da UML
Apresentação da UMLApresentação da UML
Apresentação da UML
 
PROJETO DE REDE TELEFONIA MOVEL
PROJETO DE REDE TELEFONIA MOVELPROJETO DE REDE TELEFONIA MOVEL
PROJETO DE REDE TELEFONIA MOVEL
 
Aula 7 - Modelagem de Software
Aula 7 - Modelagem de SoftwareAula 7 - Modelagem de Software
Aula 7 - Modelagem de Software
 
Abordagem diagnóstica ao paciente crítico com distúrbios respiratórios enfe...
Abordagem diagnóstica ao paciente crítico com distúrbios respiratórios   enfe...Abordagem diagnóstica ao paciente crítico com distúrbios respiratórios   enfe...
Abordagem diagnóstica ao paciente crítico com distúrbios respiratórios enfe...
 
Aula 1 aed - lógica de programação
Aula 1   aed - lógica de programaçãoAula 1   aed - lógica de programação
Aula 1 aed - lógica de programação
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 

Similaire à Standard ML / CPN ML

Similaire à 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
 

Plus de 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
 

Plus de 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