1 / 31

CHREK

CHREK. Marcos Aurélio E-mail: maurelio1234@gmail.com MSN: maurelio1234@hotmail.com. Baixando o CHREK. Abrir a pasta \cin01scratch_maas$ na rede do CIN Copiar a pasta chrek para C:temp Executar o context. Configurando o Context. Configurar atalhos em:

ginata
Télécharger la présentation

CHREK

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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’ é verdadeiroENTÃO adicione ‘Body’ ao ‘Estado’” • Simplification • Head <=> Guard | Body. “SE ‘Estado’ contém ‘Head’ e ‘Guard’ é verdadeiroENTÃO substitua ‘Head’ por ‘Body’ no ‘Estado’ atual” • Simpagation • Head \ HeadRemove ==> Guard | Body. “SE ‘Estado’ contém ‘Head’ e ‘HeadRemove’ e ‘Guard’ é verdadeiroENTÃ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-inEx: adjacent, connected…

  11. 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) Definindo as Regras (3) – Constraints Built-in

  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"). estado inicial parte fixa

  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. FerramentasAuxiliares

  17. Convenções Adotadas • Variáveis • X [X Y Z W] (2) • Regras • 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 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).

More Related