How to Run Prolog

De Augusto Baffa Wiki
Revisão de 10h55min de 28 de dezembro de 2020 por Abaffa (discussão | contribs) (Criou página com 'Other important prolog systems (Borland, XSB, LPA, Minerva ...) have been used for development and testing over the past 25 years. A new section of this tutorial is planned to...')
Ir para navegação Ir para pesquisar
Outros idiomas:
English • ‎português do Brasil

The examples in this Prolog Tutorial were developed using either Quintus Prolog running on Digital Equipment Corporation MicroVAXes (ancient history) or using SWI Prolog on either Sun Sparks (long ago), in Windows on a PC (a while ago), or (recently) under the OS X operating system on a Mac.

Other important prolog systems (Borland, XSB, LPA, Minerva ...) have been used for development and testing over the past 25 years. A new section of this tutorial is planned to describe prolog systems in a general way, but that section is not available at this time.

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