xsb Repetir os passos dados para rodar eclipse no Unix (menos o primeiro) Vantagens: Modo especial para fechar parênteses de estruturas e colchetes de listas. esc-p+ para reutilizar comando precedente. Toda a janela de execução disponível para uso de comandos emacs (search, unkill, etc.) Divisão da janela emacs em dois buffers, um de execução e um de edicao de fonte ^x-o+ para passar de uma a outra janela. Divisão da janela emacs em varias sub-janelas com \verb+^x-2+ (para dividir) e \verb+^x-1+ (para juntar). Inconveniente: dever saber/aprender emacs :)">

A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Rodar XSB Prolog no Unix Shell

Apresentações semelhantes


Apresentação em tema: "Rodar XSB Prolog no Unix Shell"— Transcrição da apresentação:

1 Rodar XSB Prolog no Unix Shell
Conectar-se em qualquer maquina SunOS5 Concatenar /home/matriks/code/languages/XSB/bin/ na variável de ambiente PATH do seu .cshrc Digitar xsb no prompt Unix. Digitar [<FILE_NAME_1>, ...,<FILE_NAME_N>]. para carregar N arquivos no ambiente de XSB. Digitar <TOP_LEVEL_PREDICATE> no prompt de XSB. Digitar return para obter o prompt para a próxima consulta Digitar ? para forcar o backtracking Digitar ^C para interromper a execução da consulta Digitar halt. para sair de XSB Exemplos com: ~jr/teaching/prolog/codeSamples/append.P ~jr/teaching/prolog/codeSamples/west.P ~jr/teaching/prolog/codeSamples/fac.P

2 Rodar XSB Prolog no Emacs
Etapas: Concatenar /home/matriks/code/languages/XSB/bin/xsb na variável de ambiente PATH do seu. Incluir no seu .emacs: (defun xsb (file) "Run an inferior XSB process, input and output via buffer *XSB*." (interactive (list (read-file-name "Base system: (default xsb)" “home/matriks/code/languages/XSB/bin/xsb” t))) (require 'shell) (require 'inf-lisp) (setq file (expand-file-name file)) (switch-to-buffer (make-comint ”XSB" file)) (inferior-prolog-mode) ) Abrir uma janela X rodando emacs. Digitar <esc-x> xsb Repetir os passos dados para rodar eclipse no Unix (menos o primeiro) Vantagens: Modo especial para fechar parênteses de estruturas e colchetes de listas. esc-p+ para reutilizar comando precedente. Toda a janela de execução disponível para uso de comandos emacs (search, unkill, etc.) Divisão da janela emacs em dois buffers, um de execução e um de edicao de fonte ^x-o+ para passar de uma a outra janela. Divisão da janela emacs em varias sub-janelas com \verb+^x-2+ (para dividir) e \verb+^x-1+ (para juntar). Inconveniente: dever saber/aprender emacs :)

3 Help On-line |?-: help(help). ... |?-: help(_). |?-: help(bagof).
|?-: help(fd).

4 Trace, Creep, Spy & Leap ?-trace. ?-spy(Pred/Arity).
Ativa o trace sistemático de todos os predicados. Todos os objetivos(as chamadas) do interpretador são impressos (precedidos por ´CALL´, ‘REDO’, ‘RESUME’ ou ‘NEXT’). Todos os resultados (as saídas) são impressos (precedidos por `*EXIT´, ‘EXIT’, ‘FAIL’ ou ‘LEAVE’). Para interromper um trace: responder ´n´ ao prompt'. ?-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.

5 Exemplo de Uso de trace fac(0,1). fac(N,Fn) :- M is N-1, fac(M,Fm),
Fn is N * Fm. append([],Y,Y). append([Xh|Xt],Y,[Xh|Rt]) :- append(Xt,Y,Rt). ?- trace. yes ?- append([a,b,c],[d,e],R). ( 1) 0 CALL: append([a,b,c],[d,e],_45) ? ( 2) 1 CALL: append([b,c],[d,e],_100) ? ( 3) 2 CALL: append([c],[d,e],_146) ? ( 4) 3 CALL: append([],[d,e],_192) ? ( 4) 3 EXIT: append([],[d,e],[d,e]) ( 3) 2 EXIT: append([c],[d,e],[c,d,e]) ( 2) 1 EXIT: append([b,c],[d,e],[b,c,d,e]) ( 1) 0 EXIT: append([a,b,c],[d,e],[a,b,c,d,e]) R = [a,b,c,d,e] More (y/n)? y

6 Exemplo de Uso de trace (cont.)
fac(0,1) :- !. fac(N,Fn) :- M is N-1, fac(M,Fm), Fn is N * Fm. append([],Y,Y). append([Xh|Xt],Y,[Xh|Rt]) :- append(Xt,Y,Rt). More (y/n)? y ( 1) 0 REDO: append([a,b,c],[d,e],[a,b,c,d,e]) ? ( 2) 1 REDO: append([b,c],[d,e],[b,c,d,e]) ? ( 3) 2 REDO: append([c],[d,e],[c,d,e]) ? ( 4) 3 REDO: append([],[d,e],[d,e]) ? ( 4) 3 FAIL: append([],[d,e],_192) ( 3) 2 FAIL: append([c],[d,e],_146) ( 2) 1 FAIL: append([b,c],[d,e],_100) ( 1) 0 FAIL: append([a,b,c],[d,e],_45) no ?- fac(3,R). ( 1) 0 CALL: fac(3,_5) ? n R = 6 More (y/n)? n yes ?-

7 Exemplo de Uso de Spy fac(0,1) :- !. fac(N,Fn) :- M is N-1, fac(M,Fm),
Fn is N * Fm. append([],Y,Y). append([Xh|Xt],Y,[Xh|Rt]) :- append(Xt,Y,Rt). ?- spy(append/3). yes ?- append([a,b,c],[d,e],R). * ( 1) 0 CALL: append([a,b,c],[d,e],_28) ? n R = [a,b,c,d,e] More (y/n)? n ?- fac(3,R). R = 6 More (y/n)? n yes ?- spy(fac). ?- fac(1,R). * ( 1) 0 CALL: fac(1,_5) ? ( 2) 1 CALL: _59 is 1-1 {system}? ( 2) 1 EXIT: 0 is 1-1 * ( 3) 1 CALL: fac(0,_136) ? * ( 3) 1 EXIT: fac(0,1) ? ( 4) 1 CALL: _5 is 1*1 {system}? ( 4) 1 EXIT: 1 is 1*1 * ( 1) 0 EXIT: fac(1,1) ? R = 1 ?-

8 Debugging, notrace, nospy
?-debugging. : mostra os predicados sendo espionados. ?-notrace. : apaga o trace sistemático. Não apagar o trace `a la carte’: ?-nospy(Pred/Arity). apaga apenas espionagem do predicado indicado. ?-nospy([ ..., Pred/Arity ,...]). para apagar espionagem de mais de um predicado. ?-nodebugging. : apaga o espionagem para todos os predicados.

9 Listing: visualizar definição de predicados
listing(Predicado) O argumento Predicado deve ser instanciado com um atomo, seja uma estrutura de predicado. Busca os fatos e regras que definem Predicado no ambiente corrente do interpretador. Se achar alguns, imprime todos eles de uma vez e responde yes. Se nao achar nenhum, responde no. Nao instancia as variaveis de Predicado. Util para debugging, especialmente de programas auto-modificadores.

10 Listing - Exemplo append([],Y,Y).
append([Xh|Xt],Y,[Xh|Rt]) :- append(Xt,Y,Rt). concat(S1,S2,Sr) :- list(L1,S1), list(L2,S2), append(L1,L2,Lr), list(Lr,Sr). ?- listing(append). /* append/3 */ append([],Y,Y) . append([Xh|Xt],Y,[Xh|Rt]) :- append(Xt,Y,Rt) . yes ?- listing(append(X,Y,R)). X = _4, Y = _12, R = _20 More (y/n)? y no ?- listing(P(X,Y,R)). Syntax error no. 7 Syntax: missing comma or operator Context: listing(P^[here](X,Y,R)). Evaluation aborted ?-

11 Clause - Exemplo clause(Conclusao,Premissa) ?- clause(member(X,Y,R)).
Conclusao deve ser instanciado com uma estrutura de funtor especificado. Busca os fatos e regras que definem Conclusao no ambiente corrente do interpretador. Se achar um fato que se unifica com Conclusao, instancia a Premissa com true. Se achar uma regra cuja conclusao se unifica com Conclusao,instancia Premissa com a premissa desta regra. Se nao achar, responde no. Se re-chamado dentro de um backtracking, instancia Premissa com o proximo fato ou proxima regra que a define. ?- clause(member(X,Y,R)). no ?- clause(append(X,Y,R),Z). X = [], Y = _29, R = _29, Z = true More (y/n)? y X = [_66|_67], Y = _29, R = [_66|_71], Z = append(_67,_29,_71) ?- clause(append,Z). ?- clause(Z,append(X,Y,R)). Error no. 11 Bad predicate rep Error goal: clause(_62/_63,append(_29,_37,_45)) Evaluation aborted ?-


Carregar ppt "Rodar XSB Prolog no Unix Shell"

Apresentações semelhantes


Anúncios Google