200 likes | 320 Views
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).
E N D
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(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 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í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 • 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! • Criar o diretório <dir>\safari já que as classes estão neste pacote. • 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 ferramentas • Criar o diretório <dir>\jeops • Neste diretório, baixar os arquivos do Jeops de: • http://www.cin.ufpe.br/~jeops/v21/download.html • ...ou daqui • 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 classes • 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. • Dica: • Comentar a parte do Exemplo1.java que se refere à base. • Compilar usando javac safari/*.java
Tutorial: Criando a base de regras • Baixar o arquivo de regras para <dir>\safari: • Baixar daqui o SafariRulesReduzido.rules • 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 exemplo • Compilar as classes: dentro de <dir>, digitar no prompt: javac safari/*.java • Não esquecer de reativar as chamadas à base de regras no exemplo! • 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 • Executar o programa de testes: dentro de <dir> digitar java safari.Exemplo1
Exercício • Criar uma classe para veículos terrestres • O veículo pode se locomover em locais fechados ou não • 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 • 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; • Alterar o código de Exemplo1 para que a regra seja disparada;
Referê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 JEOPS package safari; public ruleBase RuleBaseDefinida { rule nome_regra { declarations ... conditions ... actions ... } rule nome_regra2 { ... } ... }