Recordando o safári
Flora-2Flora-2
Aula de Laboratório
Arquivo do ExemploArquivo do Exemplo
Baixar os arquivos “safari.flr” de ~apln/aulamci em um diretório acessível pelo unix (subpasta no diretório pessoal).
Mudar para este diretório Abrir os arquivos baixados num editor de texto (Context por
exemplo)
Executando o Interpretador FloraExecutando o Interpretador Flora
Executando o XSB Conectar-se via ssh a buique.cin.ufpe.br Mudar para o diretório onde estão os arquivos ‘.P’ Executar
/home/robocup/program_files/linux/XSB/bin/xsb
Carregando o Flora Interpretador de Flora é carregado como
um programa normal do XSB [flora2].
Shell do Flora: flora _shell.
Sempre lembrar do ponto no final!!!
Shell do FloraShell do Flora
Carregando um programa ?- [nome_do_programa]. [safari].
Flora é case sensitive!!! ?- flHelp.
Help do Shell. Consultando:
Digitar premissas separadas por virgula, seguido de um ponto. Pressionar return para obter o resultado.
?- G:grupo[animal->A,local->L].
TraceTrace
Trace ?- flTrace.
Ativa o trace sistemático de todos os predicados. CALL: entrada no predicado/objeto EXIT: retorno com sucesso REDO: invocação do mesmo objetivo causado por
backtracking FAIL: não foi possível provar objetivo
?- flNoTrace Desativa o trace
Imprimindo na TelaImprimindo na Tela
Imprimindo Strings formatados fmt_write(formato,args(arg1,..., argn))@flora(io).
Formato tem sintaxe similar a println de C: “ numero:%d \n” %d: inteiro, %s: string, %S: termos
G:grupo[local->L], fmt_write(“Local do %S eh %S \n",args(G,L))@flora(io).
Pretty PrintPretty Print
Impressão formatada de classes e Objetos Imprimir objetos de uma classe
Classe[#pp_class(modulo)]@flora(pp). Ex: grupo[#pp_class(main)]@flora(pp).
Imprimir instâncias e hierarquias Ex: Classe[#pp_isa(Modulo)]@flora(pp). Ex: animal[#pp_isa(main)]@flora(pp).
Imprimir Objeto Objeto[#pp_self(Modulo)]@flora(pp). Ex: grupo1[#pp_self(main)]@flora(pp).
ExercícioExercício
Criar atributo safariValido na classe grupo Implementar regras que atribuam os valores sim e nao para o
atributo Verificar se o habitat do animal corresponde ao local de caça
do grupo Consultar quais grupos são ou não válidos
FinalizandoFinalizando
flHalt Sai do flora e do XSB
flEnd Sai do flora
halt Sai do XSB
JEOPSJEOPS
Aula prática
Tutorial: Configurando o ExemploTutorial: Configurando o Exemplo1. Criar um diretório base no temp da máquina
• Chamaremos este diretório de <dir>;• Não colocar espaços ou caracteres especiais no caminho!
2. Criar o diretório <dir>\safari já que as classes estão neste pacote.3. Baixar no diretório criado o fonte das classes de www.cin.ufpe.br/~bjs/mci/
aulaJeops/classes.zip• AnimalAquatico.java, Animal.java• Local.java, LocalAquatico.java• GrupoSafari.java• Veiculo.java,VeiculoAquatico.java• Pessoa.java, Motorista.java• Exemplo1.java
Tutorial: Configurando as ferramentasTutorial: Configurando as ferramentas1. Criar o diretório <dir>\jeops
2. Neste diretório, baixar os arquivos do Jeops de:• http://www.cin.ufpe.br/~jeops/v21/download.html
• ...ou daqui
3. Configurar o prompt do MS-DOS para Java• Ajustar o path: set path=%path%; <diretório de instalação do
JDK>\bin;
• Ajustar o classpath: set classpath=%classpath%; <dir>;<dir>\jeops\JEOPS.jar ;<dir>\jeops\JeopsRE.jar
• Importante: Não deve haver espaços em branco no path ou classpath, pois podem causar problemas no reconhecimento dos diretórios especificados nessas variáveis.
Tutorial: Compilando as classesTutorial: Compilando as classes
1. Compilar as classes: a partir de <dir>, digitar no prompt: javac
safari/<nome da classe>.java • O Exemplo1.java não compilará por causa da base que ainda não existe.
2. Dica: • Comentar a parte do Exemplo1.java que se refere à base.
• Compilar usando javac safari/*.java
Tutorial: Criando a base de regrasTutorial: Criando a base de regras
1. Baixar o arquivo de regras para <dir>\safari:• Baixar daqui o SafariRulesReduzido.rules
2. Executar o JEOPS: • dentro de <dir>, digitar no prompt:
java jeops.compiler.Main safari/SafariRulesReduzido.rules
• Será criado um arquivo .java para essa base de regras
Tutorial: Rodando o exemploTutorial: Rodando o exemplo
1. Compilar as classes: dentro de <dir>, digitar no prompt: javac safari/*.java
• Não esquecer de reativar as chamadas à base de regras no exemplo!
2. Obs.: No j.d.k 1.4.1a palavra assert é reservada da linguagem. Neste caso existe uma versão de Jeops que usa tell no lugar de assert para baixar em: http://www.cin.ufpe.br/~jeops/v21/aulas/JEOPS_TELL.zip
3. Executar o programa de testes: dentro de <dir> digitar java safari.Exemplo1
ExercícioExercício
1. Criar uma classe para veículos terrestres
• O veículo pode se locomover em locais fechados ou não
2. Criar uma classe para locais terrestres
• O local pode ser fechado ou não Locais abertos: savanas, desertos... Locais fechados: florestas sem trilha, mangues,
pântanos...
ExercícioExercício
3. Criar uma regra que insere o veículo terrestre no grupo;
• Observar se o grupo já tem veículo;
• Observar se o local é aberto ou não e se o veículo corresponde a esta característica;
4. Alterar o código de Exemplo1 para que a regra seja disparada;
Referências: Regras JEOPSReferências: Regras JEOPS
Rule ::= "rule" "{" <Rule Body> "}"
Rule Body ::= <Declarations> <Local Declarations>? <Conditions> <Actions>
Declarations ::= "declarations" (<class name> <ident> ("," <ident>)* )*
Local Declarations ::= "localdecl" (<class name> <ident> "=" <expression>)*
Conditions ::= "conditions" (<expression>)*
Actions ::= (Action)+
Action ::= "assert" "(" <expression> ")" | "retract" "(" <expression> ")" | "modified" "(" <expression> ")" | <block>
Referências: Regras JEOPSReferências: Regras JEOPSpackage safari;
public ruleBase RuleBaseDefinida {
rule nome_regra {
declarations
...
conditions
...
actions
...
}
rule nome_regra2 {
...
}
...
}