1 / 16

Rodar Prolog2 no Unix Shell

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

bud
Download Presentation

Rodar Prolog2 no Unix Shell

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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(" <FILE_NAME> "). no prompt do prolog2. • Digitar <TOP_LEVEL_PREDICATE> no prompt do prolog2. • Responder a pergunta de backtracking sistemático de prolog2. • Digitar halt. para sair do prolog2 file:prolog-ellf.ppt

  2. 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> Rodar Prolog2 no Unix-Exemplo

  3. 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 <esc-x> 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 :) Rodar Prolog2 no 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. 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 Exemplo de Uso de trace

  9. 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 ?- Exemplo de Uso de trace (cont.)

  10. 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 ?- Exemplo de Uso de Spy

  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(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. Listing - Listar predicados

  15. 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 ?- Listing - Exemplo

  16. 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 ?- Clause - Exemplo

More Related