Como executar o Prolog

De Augusto Baffa Wiki
Revisão de 10h53min de 28 de dezembro de 2020 por Abaffa (discussão | contribs) (Marcou esta versão para tradução)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar
Outros idiomas:
English • ‎português do Brasil

Os exemplos neste Tutorial do Prolog foram desenvolvidos usando Quintus Prolog rodando em Digital Equipment Corporation MicroVAXes (pré-história) ou usando SWI Prolog em Sun Sparks (muito tempo atrás), em Windows em um PC (um tempo atrás), ou (recentemente) no sistema operacional OS X em um Mac.

Outros importantes sistemas de prólogo (Borland, XSB, LPA, Minerva ...) têm sido usados ​​para desenvolvimento e teste nos últimos 25 anos. Uma nova seção deste tutorial foi planejada para descrever os sistemas de Prolog de uma maneira geral, mas essa seção não está disponível no momento.

O site do SWI-Prolog contém muitas informações sobre o SWI-Prolog, uma área de download e documentação. A manutenção do SWI-Prolog é excelente. Acesse o link ...

Os exemplos neste tutorial usam uma forma simplificada de interação com um interpretador Prolog típico. Os programas dos exemplos devem ser executados de forma semelhante em qualquer sistema que use um interpretador Prolog estilo Edimburgo ou compilador interativo.

Para iniciar uma sessão SWI-Prolog interativa em Unix, abra uma janela de terminal e digite o comando apropriado (indicado nas instruções de instalação). Por exemplo, no nosso Mac é ...

$ /opt/local/bin/swipl

{Nunca digitamos a última linha: empregamos arquivos de origem Unix para iniciar o SWI-Prolog usando argumentos de linha de comando adicionais e / ou opções para fins especiais. O leitor pode explorar essa possibilidade logo após aprender mais noções básicas do Prolog.}

No Windows, o SWI-Prolog instala um ícone de inicialização que pode ser clicado duas vezes para iniciar o interpretador. O interpretador então inicia em sua própria janela de comando.

Uma mensagem de inicialização ou banner pode aparecer, e logo será seguido por um prompt de objetivo semelhante ao seguinte

?- _


Os objetivos interativos no Prolog são inseridos pelo usuário seguindo o prompt '? -'. Muitos Prologs possuem informações de ajuda de linha de comando. SWI Prolog tem informações de ajuda abrangentes. Esta ajuda é indexada e orienta o usuário. Para saber mais sobre isso, tente

?- help(help).

Observe que todos os símbolos exibidos precisam ser digitados, seguidos por um Enter.

Para ilustrar algumas interações específicas com o Prolog, considere o seguinte exemplo de sessão. Cada arquivo referido é considerado um arquivo local na conta do usuário, que foi criado pelo usuário, obtido por cópia diretamente de alguma outra fonte pública ou obtido salvando um arquivo de texto durante o uso de um navegador da web. A maneira de obter o último é seguir uma URL para o arquivo de origem e salvá-lo ou selecionar o texto em uma página da web do Prolog Tutorial, copiá-lo, colá-lo em uma janela do editor de texto e salvar no arquivo. Os comentários /* ... */ ao lado dos objetivos são mencionados nas notas que seguem a sessão.

?- ['2_1.pl'].           /* 1. Load a program from a local file*/  
yes  
?- listing(factorial/2). /* 2. List program to the screen*/  
  
factorial(0,1).
  
factorial(A,B) :-  
           A > 0, 
           C is A-1,
           factorial(C,D),
           B is A*D. 
yes
  
?- factorial(10,What).     /* 3. Compute factorial of 10 */
What=3628800
 
?- ['2_7.pl'].            /* 4. Load another program */

?- listing(takeout).
  
takeout(A,[A|B],B).
takeout(A,[B|C],[B|D]) :-
          takeout(A,C,D).
yes

?- takeout(X,[1,2,3,4],Y).  /* 5. Take X out of list [1,2,3,4] */
X=1  Y=[2,3,4] ;              Prolog waits ... User types ';' and Enter
X=2  Y=[1,3,4] ;               again ...  
X=3  Y=[1,2,4] ;               again ...
X=4  Y=[1,2,3] ;               again ...
no                             Means: No more answers.

?- takeout(X,[1,2,3,4],_), X>3.  /* 6.  Conjunction of goals */
X=4 ;
no

?- halt.                         /* 7. Return to OS */

Os comentários que aparecem à direita em vários pontos em uma sessão de exemplo foram adicionados com um editor de texto. Eles também servem como sinais de referência para as notas que aparecem abaixo. Discutimos vários pontos agora, enquanto outros detalhes serão adiados para seções posteriores.


Notas

1. Um objetivo do Prolog é encerrada com um ponto "." Nesse caso, o objetivo era carregar um arquivo de programa. Esta notação de estilo de "colchetes" remonta às primeiras implementações do Prolog. Vários arquivos podem ser carregados em cadeia listando os nomes dos arquivos sequencialmente entre colchetes, separados por vírgulas. Nesse caso, o nome do arquivo é 2_1.pl (programas correspondentes à Seção 7.1 deste tutorial), que contém dois programas de Prolog para calcular o fatorial de um inteiro positivo. O programa real no arquivo é discutido na Seção 2.1. O arquivo do programa estava localizado no diretório atual. Se não tivesse, o caminho para ele teria de ser especificado da maneira usual.

2. O predicado embutido 'listing' listará o programa na memória - neste caso, o programa fatorial. A aparência desta listagem é um pouco diferente da aparência do código-fonte no arquivo, que veremos na Seção 2.1. Na verdade, Quintus Prolog compila programas, a menos que os predicados sejam declarados como dinâmicos. Os predicados compilados não têm uma listagem de fonte interativa que pode ser fornecida pelo objetivo de 'listing'. Portanto, para ilustrar esse recurso do interpretador Prolog, os predicados foram declarados como dinâmicos no código-fonte antes da execução desta amostra.

3. O objetivo, 'factorial(10,What)', diz essencialmente "o fatorial de 10 é o quê?". A palavra 'What' começa com uma letra maiúscula, denotando uma variável lógica. Prolog satisfaz o objetivo encontrando o valor da variável 'O que'.

4. Ambos os "programas" agora residem na memória, dos dois arquivos de origem 2_1.pl e 2_7.pl. O arquivo 2_7.pl contém muitas definições de processamento de lista. (Consulte a Seção 2.7.)

5. No programa que acabou de carregar, está uma definição do predicado lógico 'takeout'. O objetivo 'takeout (X, [1,2,3,4], Y)' pede que X seja retirado da lista [1,2,3,4], deixando a lista restante Y, de todas as maneiras possíveis. Existem quatro maneiras de fazer isso, conforme mostrado na resposta. O predicado 'takeout' é discutido na Seção 2.7. Observe, no entanto, como Prolog é estimulado a produzir todas as respostas possíveis: Depois de produzir cada resposta, Prolog espera com um cursor no final da resposta. Se o usuário digitar um ponto-e-vírgula ';' , O Prolog procurará uma próxima resposta e assim por diante. Se o usuário apenas pressionar Enter, o Prolog para de procurar respostas.

6. Um objetivo composto ou conjuntivo exige que dois objetivos individuais sejam satisfeitos. Observe a meta aritmética (relação interna), 'X> 3'. O Prolog tentará satisfazer esses objetivos na ordem da esquerda para a direita, da mesma forma que eles seriam lidos. Nesse caso, há apenas uma resposta. Observe o uso de uma variável anônima '_' no objetivo, para o qual nenhuma ligação é relatada ("variável irrelevante").

7. O objetivo 'halt' sempre é bem-sucedido e retorna o usuário ao sistema operacional.


Veja Também