150 likes | 236 Views
XSB Prolog. Aula de Laboratório. Conectar ao UNIX(caruaru.cin.ufpe.br de preferencia) Baixar os arquivos ‘.P’ de /~eaa/prolog para um diretorio acessivel a partir do UNIX Mapeia \escadaeaa No diretorio public_htmlprolog Mudar para este diretório
E N D
XSB Prolog Aula de Laboratório
Conectar ao UNIX(caruaru.cin.ufpe.br de preferencia) • Baixar os arquivos ‘.P’ de /~eaa/prolog para um diretorio acessivel a partir do UNIX • Mapeia \\escada\eaa • No diretorio public_html\prolog • Mudar para este diretório • Abrir os arquivos baixados num editor de texto (Context por exemplo)
XSB • XSB pode ser visto como um sistema Prolog • É multi-plataforma • Código-fonte aberto e em desenvolvimento • O uso de predicados tabelados evita loops infinitos • Trata termos Hilog(programação de alta ordem ou meta-programação) • Fornece engenho de implementação para Programação em Lógica e para aplicações orientadas a dados • Possui interfaces para: C, Java, Oracle, ODBC • Suporte a FLORA: uma sofisticada interface orientada a objetos
XSB • Executar • Conectar-se em qualquer maquina SunOS5 (ex,Caruaru) • Concatenar /home/robocup/solaris/XSB/bin/ na variável de ambiente PATH do seu .cshrc; ou • Criar um alias como abaixo • alias xsb /home/robocup/solaris/XSB/bin/xsb • Digitar xsb no prompt Unix. • Carregar Arquivo • Digitar [<FILE_NAME_1>, ...,<FILE_NAME_N>]. para carregar N arquivos no ambiente de XSB; ou • consult(< FILE_NAME>). (ou reconsult(< FILE_NAME>).)
XSB • Consultar • Digitar o predicado (ou predicados separados por virgula) e pressionar return para obter o resultado e o prompt para a próxima consulta • Digitar ‘;’ para forcar o backtracking • Encerrar • Pressionar CTRL+C para interromper a execução da consulta • Digitar halt.(ou 2 CTRL +C seguidos) para sair do XSB
XSB • Módulo user • Com o módulo user você pode compilar predicados Prolog sem criar um arquivo tais predicados • Ex: Execute o xsb e depois carregue o módulo user da seguinte forma • [user]. <enter> • Digite os predicados abaixo • prof(ia,di,ufpe,pessoa(geber,_)). musico(pessoa(_,senior)). pessoa(geber, senior). • Pressione CTRL+D • Consulte os predicados
XSB • Exemplos • Carregar o arquivo west.P e : • Verificar se bush é criminoso. • Verificar quais o criminosos conhecidos • Debug • ?-trace. • Ativa o trace sistemático de todos os predicados. • Todos os objetivos(as chamadas) do interpretador são impressos (precedidos por ´CALL´ ou ‘REDO’). • Todos os resultados (as saídas) são impressos (precedidos por `*EXIT´, ‘EXIT’ ou ‘FAIL’). • Para interromper um trace: responder ´n:<enter>´ ao prompt'. • Veja o trace do predicado criminal/1
XSB • ?-notrace. • Apaga(desativa) o trace sistemático. • ?-spy(Pred/Arity). • Ativa o trace de predicados específicos. • Imprime apenas os CALL, ..., REDO, EXIT, ..., FAIL do predicado passado como argumento. • Os predicados são especificados por seu nome/aridade; onde a aridade é opcional. • spy([ ..., Pred1/Aity1, ...]). : para especificar uma lista de predicados a rastrear. • Ative o trace para o predicado hostile/1 e veja quais o criminosos conhecidos.
XSB • ?-nospy(Pred/Arity). • Desativa apenas a espionagem do predicado indicado. • ?-nospy([ ..., Pred/Arity ,...]). • Para desativar espionagem de mais de um predicado. • ?-nodebug. • Desativa a espionagem para todos os predicados. • Redirecionar o Debug • A seqüência • ?-debug_ctl(redirect,‘arquivodebug.log'). • ?-debug_ctl(prompt,off). • Direcionará a saída do debug para o arquivo ‘arquivodebug.log'
XSB • Exemplos • Carregue o arquivo append.P e: • Quais as listas cujo append produz a lista [a,b,c]? • Adicionar a lista [m,n] à lista [a,b,m] resulta em [a,b,m,n]? • Quais os dias da semana antecedem e quais sucedem o sábado? • Exercícios • Construir predicados para as seguintes operações sobre listas: • Adicionar um item, apagar um item, determinar o tamanho da lista.
XSB • Exemplos • Carregue o arquivo fac.P e: • Qual o fatorial de 15, 1000, 31 e 30? • 125261824 é o fatorial de 16? • Qual o número cujo fatorial é 40320? • Exercícios • Construir o predicados para determinar uma P.A com a seguinte forma: arithmeticProgression(FirstTerm,Difference,NTerm,Result)
XSB • Exemplos • Carregue o arquivo dataCheck.P e: • Verificar se a data 29/2/2002 é uma data válida? • Execute a seguintes consultas : • Hoje=date(2002,7,10),tomorrow(Hoje,R). • correct_date(make_date(2002,02,28,Date)). • make_date(2002,02,28,Date),correct_date(Date). • make_date(2002,02,28,_Date),correct_date(_Date). • Exercícios • Construir os predicados:yesterday, afterTomorrow, beforeYesterday • Fazer a verificação completa de ano bisexto • Fazer com que make_date produza apenas datas corretas
Predicados Tabelados • O predicado ancestor(X,Y) :- ancestor(X,Z), parent(Z,Y). ancestor(X,Y) :- parent(X,Y). Entra em loop infinito • O uso de predicados tabelados elimina o loop infinito :- table ancestor/2. ancestor(X,Y) :- ancestor(X,Z), parent(Z,Y). ancestor(X,Y) :- parent(X,Y).
Termos Hilog • Termos Hilog :- hilog closure. closure(R)(X,Y) :- R(X,Y). closure(R)(X,Y) :- closure(R)(X,Z), R(Z,Y).