How to Run Prolog
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.
SWI-Prolog's website has lots of information about SWI-Prolog, a download area, and documentation. The upkeep for SWI-Prolog is excellent. The link ...
The examples in this tutorial use a simplified form of interaction with a typical Prolog interpreter. The sample programs should execute similarly on any system using an Edinburgh-style Prolog interpreter or interactive compiler.
To start an interactive SWI-Prolog session under Unix, open a terminal window and type the approprite command (indicated in the installation instructions). For example, on our Mac this is ...
$ /opt/local/bin/swipl
{We never type that last line: we employ Unix source files to start SWI-Prolog using additional command line arguments and/or switches for special purposes. The reader could explore this possibility soon after learning more prolog basics.}
Under Windows, SWI-Prolog installs a start icon that can be double-clicked to initiate the interpreter. The interpreter then starts in its own command window.
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.