SlideShare uma empresa Scribd logo
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

Mais conteúdo relacionado

PDF
SLIDES PARA CULTO INFANTIL / TEMA:Filhos de Deus
PDF
Aula 02.o adolescente conhecendo a bíblia
PPTX
哥林多後書第一章ppt
PDF
todas as parbolas da biblia
DOC
Apostila de dons espirituais
PPTX
11. o livro dos juízes
PPTX
Panorama do NT - 1João
PPTX
羅馬書簡介
SLIDES PARA CULTO INFANTIL / TEMA:Filhos de Deus
Aula 02.o adolescente conhecendo a bíblia
哥林多後書第一章ppt
todas as parbolas da biblia
Apostila de dons espirituais
11. o livro dos juízes
Panorama do NT - 1João
羅馬書簡介

Mais procurados (20)

PPTX
加拉太書第二章 捍衛福音真理
PPT
Paulo Apostolo de Cristo Jesus
PPT
Vida Comunitária
PPTX
使徒行传第一章ppt (下) 背叛与饶恕
PPTX
Aula 4 - Marcos
PPSX
PPTX
約翰二書 第一章:按真理相愛
PPTX
路加福音第十七章ppt (下)
PDF
As cartas paulinas
PPTX
I corintios
PPTX
Família, um projeto de Deus (JIN).ppt
PPT
SEMINÁRIO RECONQUISTA - Projeto da Reconciliação "Onde está o teu irmão?"
PPTX
羅馬書第十二章ppt
PPTX
Introdução à mariologia (2012)
PPTX
O cântico dos cânticos
DOCX
Formação – leitores
DOCX
Estudo bíblico pessoal completo 01 a 10
PPTX
FORMAÇÃO DO DÍZIMO
PDF
CF TEXTO BASE RESUMO.pdf
PPT
哥林多後書1 (林後1:1-11) 患難中的安慰
加拉太書第二章 捍衛福音真理
Paulo Apostolo de Cristo Jesus
Vida Comunitária
使徒行传第一章ppt (下) 背叛与饶恕
Aula 4 - Marcos
約翰二書 第一章:按真理相愛
路加福音第十七章ppt (下)
As cartas paulinas
I corintios
Família, um projeto de Deus (JIN).ppt
SEMINÁRIO RECONQUISTA - Projeto da Reconciliação "Onde está o teu irmão?"
羅馬書第十二章ppt
Introdução à mariologia (2012)
O cântico dos cânticos
Formação – leitores
Estudo bíblico pessoal completo 01 a 10
FORMAÇÃO DO DÍZIMO
CF TEXTO BASE RESUMO.pdf
哥林多後書1 (林後1:1-11) 患難中的安慰
Anúncio

Semelhante a Standard ML / CPN ML (20)

PDF
PDF
Scheme
PDF
K19 k31-csharp-e-orientacao-a-objetos
PDF
Programação funcional tipada: uma introdução
PDF
Csharp e orientacao a objetos
PDF
Haskell aula2 tipos-e-classes
PPTX
Visualg
PDF
Aprenda computação com python 3.0 (1)
PDF
K19 k11-orientacao-a-objetos-em-java
PDF
K19 k11-orientacao-a-objetos-em-java
PDF
Aprenda computaocompython
PDF
Paradigma Funcional - Caso de Estudo Haskell
ODP
Paradigma funcional
PDF
Unidade7 1
PDF
Aula 4 lógica de programação, sobre estruturas de repetição
PPTX
8 paradigma funcional usando haskell
PDF
Apostila de Java: Orientação a Objetos
PPTX
Logica programar
PDF
Estruturas dados
PDF
Estruturas dados
Scheme
K19 k31-csharp-e-orientacao-a-objetos
Programação funcional tipada: uma introdução
Csharp e orientacao a objetos
Haskell aula2 tipos-e-classes
Visualg
Aprenda computação com python 3.0 (1)
K19 k11-orientacao-a-objetos-em-java
K19 k11-orientacao-a-objetos-em-java
Aprenda computaocompython
Paradigma Funcional - Caso de Estudo Haskell
Paradigma funcional
Unidade7 1
Aula 4 lógica de programação, sobre estruturas de repetição
8 paradigma funcional usando haskell
Apostila de Java: Orientação a Objetos
Logica programar
Estruturas dados
Estruturas dados
Anúncio

Mais de Dalton Valadares (20)

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

Último (19)

PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Custos e liquidação no SAP Transportation Management, TM130 Col18
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Aula 18 - Manipulacao De Arquivos python
Apple Pippin Uma breve introdução. - David Glotz
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Aula04-Academia Heri- Tecnologia Geral 2025
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
COBITxITIL-Entenda as diferença em uso governança TI
Processos na gestão de transportes, TM100 Col18
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...

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