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

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

Rodar Prolog2 no Unix Shell Conectar-se em limoeiro. Incluir /usr/local/prolog2/sys no seu path. Digitar prolog2 no prompt Unix. Digitar consult(" ").

Apresentações semelhantes


Apresentação em tema: "Rodar Prolog2 no Unix Shell Conectar-se em limoeiro. Incluir /usr/local/prolog2/sys no seu path. Digitar prolog2 no prompt Unix. Digitar consult(" ")."— Transcrição da apresentação:

1 Rodar Prolog2 no Unix Shell Conectar-se em limoeiro. Incluir /usr/local/prolog2/sys no seu path. Digitar prolog2 no prompt Unix. Digitar consult(" "). no prompt do prolog2. Digitar no prompt do prolog2. Responder a pergunta de backtracking sistemático de prolog2. Digitar halt. para sair do prolog2 file:prolog-ellf.ppt

2 Rodar Prolog2 no Unix-Exemplo prompt> more.cshrc set path = (. ~/bin \ /usr/local/prolog2/sys \ /usr/local/TeX/bin)... prompt> more my_prog.pro append([],Y,Y). append([Xh|Xt],Y,[Xh|Rt]) :- append(Xt,Y,Rt). ## rsh limoeiro prompt> prolog2 ?- consult("my_prog.pro"). ?- reconsult("my_prog.pro"). yes ?- append([a,b,c],[d,e],R). R = [a,b,c,d,e] More (y/n)? y ?- halt. Leave Prolog (y/n) y prompt>

3 Rodar Prolog2 no Emacs Etapas: Incluir no meu path: /usr/local/prolog2/sys Incluir no meu.emacs: (setq prolog-program-name "/usr/local/prolog2/sys/prolog2") Abrir uma janela X rodando emacs. Digitar run-prolog+ Repetir os passos dados para rodar Prolog no Unix (menos o que chama o Prolog) 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 :)

4 Help On-line ?- help(bagof). ------------------------------------------------------------ BIP Help entry: bagof ------------------------------------------------------------ Call: bagof(X,Goal,L). Purpose: L is list of X such that Goal. Arguments: X Any Goal Goal + L List Description: Duplicates are not eliminated and the list is not sorted. If there are no solutions the call fails (never returns L = []). If Goal has variables not in X call may be resatisfiable. ------------------------------------------------------------

5 Listar predicados Built-in ?- apropos(wr). ------------------------------------------------------------ Entries in help system matching "wr" are: ------------------------------------------------------------ seek_write write writeq writing_at open_readwrite open_write state(write_depth ------------------------------------------------------------

6 Listar predicados Built-in (cont.) ?-apropos. =.. =:= =<... abolish abort ancestor ancestors print_ancestor arg assert asserta assertz at atom atomic atomprops backtrace back_msg call character_class clause close close_module do_tokens compile_tokens tidy_tokens conlist consult core create_character_cl create_module create_state_table create_stream create_token_class create_token_format create_token_proces create_type_class creep datatype debug debug_on debug_off...

7 Ativar o Trace: PBI ?-trace. Ativa o trace sistemático de todos os predicados. Todos os objetivos(as chamadas) do interpretador são impressos (precedidos por ´CALL´). Todos meus resultados (as saídas) são impressos (precedidos por `EXIT´). Para interromper um trace: responder ´n´ ao prompt `?-'. ?-spy(Pred/Arity). Ativa o trace de predicados específicos. Imprime apenas os CALL e EXIT 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.

8 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

9 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 ?- my_fac(3,R). ( 1) 0 CALL: my_fac(3,_5) ? n R = 6 More (y/n)? n yes ?-

10 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 yes ?- my_fac(3,R). R = 6 More (y/n)? n yes ?- spy(my_fac). yes ?- my_fac(1,R). * ( 1) 0 CALL: my_fac(1,_5) ? ( 2) 1 CALL: _59 is 1-1 {system}? ( 2) 1 EXIT: 0 is 1-1 * ( 3) 1 CALL: my_fac(0,_136) ? * ( 3) 1 EXIT: my_fac(0,1) ? ( 4) 1 CALL: _5 is 1*1 {system}? ( 4) 1 EXIT: 1 is 1*1 * ( 1) 0 EXIT: my_fac(1,1) ? R = 1 More (y/n)? n yes ?-

11 Sair do modo Trace: PBI ?-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.

12 Programação Dinamica Predicados Built-in para programação dinamica: Programa Prolog: E um banco de dados dedutivo, cujos fatos sao dados explicitos, e cujas regras sao dados implicitos. Existem predicados built-in para: Dinamicamente, dentro da execucao de outros predicados,inserir ou apagar dados no banco,i.e., inserir ou apagar elementos do programa Prolog em execu\cao.

13 Programação Dinamica (cont.) Predicados Built-in para programação dinamica: Esses predicados são: Meta-lógicos, i.e. com uma semântica declarativa, alem da logica dos predicados. Que cumprem suas tarefas com seus efeitos colaterais. Necessarios apenas para meta-programacao, otimizacao e deducao nao monotonica. Fazem com que um predicado possa ser verificado em um momento da computacao e nao verificado em um outro momento.

14 Listing - Listar 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.

15 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 ?-

16 Clause - Exemplo clause(Conclusao,Premissa) 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) More (y/n)? y no ?- clause(append,Z). no ?- 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 Prolog2 no Unix Shell Conectar-se em limoeiro. Incluir /usr/local/prolog2/sys no seu path. Digitar prolog2 no prompt Unix. Digitar consult(" ")."

Apresentações semelhantes


Anúncios Google