Flora-2 Aula de Laboratório
Arquivo 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 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 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].
Trace 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 Tela Imprimindo Strings formatados fmt_write(formato,args(arg 1,..., arg n 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
Pretty Print Impressão formatada de classes e Objetos Imprimir objetos de uma classe Ex: Imprimir instâncias e hierarquias Ex: Ex: Imprimir Objeto Ex:
Exercí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
Finalizando flHalt Sai do flora e do XSB flEnd Sai do flora halt Sai do XSB
JEOPS Aula prática
Tutorial: Configurando o Exemplo 1.Criar um diretório base no temp da máquina Chamaremos este diretório de ; Não colocar espaços ou caracteres especiais no caminho! 2.Criar o diretório \safari já que as classes estão neste pacote. 3.Baixar no diretório criado o fonte das classes de AnimalAquatico.java, Animal.java Local.java, LocalAquatico.java GrupoSafari.java Veiculo.java,VeiculoAquatico.java Pessoa.java, Motorista.java Exemplo1.java
Tutorial: Configurando as ferramentas 1.Criar o diretório \jeops 2.Neste diretório, baixar os arquivos do Jeops de: daquidaqui 3.Configurar o prompt do MS-DOS para Java Ajustar o path: set path=%path%; \bin; Ajustar o classpath: set classpath=%classpath%; ; \jeops\JEOPS.jar ; \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 classes 1.Compilar as classes: a partir de, digitar no prompt: javac safari/.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 regras 1.Baixar o arquivo de regras para \safari: Baixar daqui o SafariRulesReduzido.rulesdaqui 2.Executar o JEOPS: dentro de, digitar no prompt: java jeops.compiler.Main safari/SafariRulesReduzido.rules Será criado um arquivo.java para essa base de regras
Tutorial: Rodando o exemplo 1.Compilar as classes: dentro de, 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: Executar o programa de testes: dentro de digitar java safari.Exemplo1
Exercí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í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 JEOPS n Rule ::= "rule" "{" "}" n Rule Body ::= ? n Declarations ::= "declarations" ( ("," )* )* n Local Declarations ::= "localdecl" ( "=" )* n Conditions ::= "conditions" ( )* n Actions ::= (Action)+ n Action ::= "assert" "(" ")" | "retract" "(" ")" | "modified" "(" ")" |
Referências: Regras JEOPS package safari; public ruleBase RuleBaseDefinida { rule nome_regra { declarations... conditions... actions... } rule nome_regra2 {... }... }