A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com.

Apresentações semelhantes


Apresentação em tema: "CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com."— Transcrição da apresentação:

1 CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com
MSN:

2 Baixando o CHREK Abrir a pasta \\cin01\scratch_maas$\ na rede do CIN
Copiar a pasta chrek para C:\temp\ Executar o context

3 Configurando o Context
Configurar atalhos em: Options > Environment Options > Execute Keys Atalhos configurados no editor F9 – GUI para acompanhamento passo da execução F10 – Explicação do raciocínio no Console do Context e no arquivo console.txt

4 Configurando o Context

5 Configurando o Context

6 Configurando o Context

7 CHR no CHREK

8 Definindo um GOAL A execução de um programa CHR sempre inicia com a definição de um goal e de um conjunto de regras A execução de um programa CHR se dá através da aplicação iterativa das regras Regras Regras Goal Estadoinicial ... Estadofinal

9 Definindo as Regras (1) Existem três tipos de regras: Propagation
Head ==> Guard | Body. “SE ‘Estado’ contém ‘Head’ e ‘Guard’ é verdadeiro ENTÃO adicione ‘Body’ ao ‘Estado’” Simplification Head <=> Guard | Body. “SE ‘Estado’ contém ‘Head’ e ‘Guard’ é verdadeiro ENTÃO substitua ‘Head’ por ‘Body’ no ‘Estado’ atual” Simpagation Head \ HeadRemove ==> Guard | Body. “SE ‘Estado’ contém ‘Head’ e ‘HeadRemove’ e ‘Guard’ é verdadeiro ENTÃO adicione ‘Body’ e remova ‘HeadRemove’”

10 Definindo as Regras (2) - Constraints
O Head, Guard e Body são conjuntos de constraints. Existem dois tipos de constraints: Built-ins: implementadas através de classes Java e reconhecidas automaticamente pelo compilador (basta estar no CLASSPATH) Ex: writeLn Definidas pelo usuário: qualquer constraint que apare;a no programa e não seja built-in Ex: adjacent, connected…

11 Definindo as Regras (3) – Constraints Built-in
A = B true false ground(X) unbound(X) ne(X,Y)  X != Y le(X,Y)  X>=Y ge(X,Y)  X<=Y lt(X,Y)  X<Y gt(X,Y)  X>Y writeLn(X) write(X) readInt(X) instanceOf(X,Str)

12 Definindo as Regras (4) O Head é sempre uma conjunção de constraints definidas pelo usuário Head ==> Guard | Body. Head <=> Guard | Body. HeadAdd \ HeadRemove ==> Guard | Body. O Guard é sempre uma conjunção de constraints built-in (*) O Body é uma conjunção ou disjunção de constraints quaisquer

13 Definindo as Regras (5) Exemplos de regras:
fib(N,M) ==> ge(N,2) | T1 = N~1, fib(T1,M1), T2 = N~2, fib(T2,M2), M=M1+M2. max(X,Y,Z) <=> le(X,Y) | Z = Y. prime(I) \ prime(J) ==> modEqual(J, I, 0) | true.

14 Definindo o GOAL O goal é definido através de uma regra especial:
main() <=> true | writeLn("hello world"). parte fixa estado inicial

15 Exemplos - Max max(X,Y,Z) <=> le(X,Y) | Z = Y.
max(X,Y,Z) <=> le(Y,X) | Z = X. max(X,Y,Z) ==> true | le(X,Z), le(Y,Z). main() <=> true | max(17,139,M).

16 Ferramentas Auxiliares

17 Convenções Adotadas Variáveis Regras X [X Y Z W] (2)
a() ==> true | (c() ; d() ) <<1>> Nome da Variável Variáveis Relacionadas (X=Y=Z=W) Valor Corpo da regra que será aplicado da próxima vez que a regra for aplicada

18 Tracer (F9) Regras do programa Restrições Restrições Definidas pelo
usuário Restrições Built-in Explicação

19 Explicação do raciocínio (F10)
Apresenta de forma textual todos os passos e decisões tomados durante a execução do programa Incluir a diretiva de compilação “:- explain” no início do programa e pressionar F10

20 Explicação do raciocínio (F10)
Initializing handler max... CHRv Program R1:: max(X, Y, Z)<=>X <= Y|Z = Y R2:: max(X, Y, Z)<=>Y <= X|Z = X R3:: max(X, Y, Z)==>true|X <= Z, Y <= Z Query: max(17, 139, M), result(M) Nome do programa sendo executado Regras do programa (A regra que define o goal não aparece aqui!) Estado inicial (GOAL)

21 Explicação do raciocínio (F10)
Explanation in detail: (1) R1:: max(X, Y, Z)<=>X <= Y|Z = Y reason: max(X_2[17], Y_3[139], M_1) matched added: M_1 = Y_3[139], X_2[17] <= Y_3[139] removed: max(X_2[17], Y_3[139], M_1) (1st choice) (2) [backtrack], reason: no more rules to apply. { result(M_1[139]) } Regra que foi aplicada Constraints que ativaram a regra Efeito da aplicação da regra Corpo da regra que foi aplicado Motivo do backtrack Estado no CS no momento do Backtrack

22 Exemplo: Triangram

23 Triangram Usa apenas triângulos como tipos básicos

24 Triangram Os tipos de polígonos que podem ser formados também limitado.

25 Triangram – UML/OCL

26 Triangram – UML/OCL

27 Triangram – Implementação
Goal Cenário Hierarquia de classes Rules Invariantes Métodos Query  regras de propagação com as pré-condições como head e uma constraint definida pelo usuário como body. Transacional  regras de simpagation com pré-condições no head, remoções no HeadRemoval e pós-condições no body.

28 Triangram – Implementação
Goal main() <=> true | ... Hierarquia de classes sub(scaleneTriangle,triangle), sub(isoscelesTriangle,triangle), sub(equilateralTriangle,isoscelesTriangle), ... Cenário isa(tri1, equilateralTriangle), sideOf(s11, tri1), adjacent(s11,s22), ...

29 Triangram – Implementação
Invariantes ... adjacent(X,S) ==> true | adjacent(S,X). isa(X,triangle), sideOf(S1,X), sideOf(S2,X), lengthOf(S1,L1), lengthOf(S2,L2) ==> ne(S1,S2), L1=L2 | isa(X, regularPolygon).

30 Triangram – Implementação
Métodos de Query ... isa(Pol1, rectangle), isa(Pol2, isoscelesTriangle), ... ==> ne(P1, Pol2), ne(P2, Pol2) | isCompatible(Pol1,Pol2, SidePol1, SidePol2).

31 Triangram – Implementação
Métodos Transacionais ... isa(Pol1, triangle), isCompatible(Pol1, Pol2, SidePol1, SidePol2), isa(Pol2, triangle) ... \ adjacent(A11,SidePol1), adjacent(A22, SidePol2) ... ==> ne(A11, A12), ne(A21, A22) | adjacent(A11, A22), adjacent(A12, A21), ..., isa(Pol3, rectangle).


Carregar ppt "CHREK Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com."

Apresentações semelhantes


Anúncios Google