Avançar para o conteúdo
Imagem com logotipo, contendo link para a página inicial
  • United Stated of America flag, representing the option for the English language.
  • Bandeira do Brasil, simbolizando a opção pelo idioma Português do Brasil.

Ambientes de Desenvolvimento: Configuração para Programação em Prolog

Na esquerda, o ambiente gráfico fornecido pelo SWI Prolog, com uma sessão REPL e o editor de PceEmacs. Na direita, um exemplo de documentação provida por Prolog para o termo `format`, em uma sessão de terminal usando `Konsole` em Linux.

Créditos para a imagem: Imagem criada pelo autor usando o programa Spectacle.

Pré-Requisitos

Os pré-requisitos para iniciar as atividades de programação em Prolog são semelhantes aos descritos para JavaScript, Python e Lua: um editor de texto e um interpretador, ou um Ambiente Integrado de Desenvolvimento (em inglês, Integrated Development Environment ou IDE).

Para evitar repetir as discussões feitas anteriormente para JavaScript e Python:

Parte do conteúdo desta página será idêntico ao conteúdo de Python. Portanto, caso alguns parágrafos sejam familiares, não será impressão, mas um certo déjà vu. Por sinal, isso também ocorrerá em novas entradas sobre ambientes de desenvolvimento em outras linguagens de programação. Afinal, os procedimentos para configuração são similares.

Prolog Como Primeira Linguagem de Programação

Python e Lua lideram a minha lista de recomendações de linguagens de programação para iniciantes, como comentado na introdução sobre ambientes de desenvolvimento; a terceira opção é JavaScript, devido à Internet.

Assim como LISP, Prolog como primeira linguagem pode ser uma opção para algumas pessoas. Em particular, pessoas que gostem de lógica e tenham interesse em Inteligência Artificial (IA, do inglês Artificial Intelligence ou AI) podem apreciar a linguagem.

Também existem pesquisas acadêmicas sobre ensino de programação e IA para crianças utilizando Prolog.

Todavia, uma possível dificuldade em escolher Prolog como primeira linguagem de programação não é exatamente a linguagem, mas o número reduzido de pessoas que conhecem a linguagem. Exceto via Internet, obter ajuda pode ser difícil. É muito mais provável conhecer alguém que programe em linguagens como JavaScript, Python, Lua, Java ou C# que Prolog. Assim, pessoas que não se descrevam como autodidatas talvez tenham mais dificuldades em começar programação com Prolog.

Sobre Prolog

Programming in Logic ou simplesmente Prolog é uma linguagem de programação que utiliza o paradigma lógico. A linguagem é uma boa opção para IA, processamento de linguagem natural, sistemas especialistas (expert systems) e algoritmos de planejamento automatizado.

Assim como LISP, programar em Prolog requer uma forma diferente de pensar. Prolog é uma linguagem diferente porque, comumente, não se modela soluções, mas o problema por meio dados e regras.

A programadora ou o programador descreve e modela dados e regras, questiona o interpretador Prolog, e o motor de inferência da linguagem tenta obter uma resposta baseada no modelo. Em outras palavras, a abordagem é oposta a quase todos os outros paradigmas de programação, nos quais se instrui como a máquina deve resolver o problema.

O paradigma lógico permite obter soluções ou aproximações de algumas classes de problemas que podem ser mais complexas em outros paradigmas. Por exemplo, problemas envolvendo teoria de conjuntos, problemas de satisfação de restrições (constraint solvers) e problemas de satisfabilidade booleana (boolean satisfiability problems). Contudo, isso não significa que a linguagem possa resolvê-los de forma eficiente, mas isso é um problema para toda linguagem de programação (consultar NP-completo). Analogamente, outras linguagens podem obter os mesmos resultados para os problemas, embora isso possa exigir mais esforços.

Para se obter documentação para Prolog, pode-se consultar:

  • A documentação provida pela função help(). Por exemplo, help(format). (o ponto final faz parte do comando);
  • Documentação do SWI-Prolog. Caso use outra distribuição, consulte a documentação específica. Todavia, consultar a documentação do SWI-Prolog ser interessante mesmo para outras distribuições.
  • GNU Prolog, como exemplo de documentação de outra distribuição.

Versões e Implementações

Existem várias implementações de Prolog para se escolher. Exemplos include:

Também existem implementações para ser usadas em conjunto com outras linguagens de programação (embedded), como Tau Prolog para JavaScript, ou mesmo bibliotecas para usar SWI-Prolog em C++.

Para iniciantes, eu recomendaria o uso de SWI-Prolog, pode ser uma das opções mais populares.

Considerações Adicionais

Os exemplos consideram o uso de SWI-Prolog. Além disso, para fazer paralelos com outras linguagens de programação, os exemplos desta página não serão suficientemente bons para ilustrar as qualidades de Prolog.

Interpretador e Editor de Texto

Deve-se usar contas de root ou de administrador apenas para instalar o interpretador. Após instalá-lo, use uma conta de usuário comum, sem privilégios mais altos, para usar o interpretador e programar.

Linux

Distribuições Linux podem fornecer outras distribuições de Prolog (como SWI-Prolog e GNU Prolog). Os exemplos a seguir consideram a instalação de SWI-Prolog.

  1. Arch Linux:
    pacman -S swi-prolog
  2. Debian, Ubuntu ou distribuições baseadas nas anteriores:
    apt-get install swi-prolog
  3. Fedora:
    dnf install pl
  4. Gentoo:
    emerge --ask dev-lang/swi-prolog

macOS

Em ambientes macOS, pode-se usar brew para instalar SWI-Prolog.

Windows

Para instalar SWI Prolog em Windows, pode-se obter o arquivo de instalação na página de downloads do projeto. Para a maioria dos casos, pode-se optar pela versão 64-bit (SWI-Prolog 8.4.0-1 for Microsoft Windows (64 bit)). Caso seu computador seja muito antigo, talvez seja necessário escolher a versão 32-bit (SWI-Prolog 8.4.0-1 for Microsoft Windows (32 bit)).

Durante a instalação, é conveniente adicionar o interpretador automaticamente ao PATH (você pode optar em adicionar para todos os usuários ou apenas para o usuário atual). Também pode ser conveniente criar um atalho para o programa na área de trabalho.

Habilitando opções para adicionar SWI Prolog ao `PATH` e um atalho para a área de trabalho.

Quando o arquivo de instalação perguntar quais os recursos desejados, pode-se manter todas as opções marcadas. Algumas funcionalidades podem ser desnecessárias para iniciantes, mas o tamanho total da instalação é relativamente pequeno (cerca de 42.1 MB a versão 8.4.0-1 para 64-bit).

Após o término da instalação, pode-se usar SWI Prolog no terminal cmd usando swipl (caso tenha sido adicionado ao PATH). Caso contrário, pode-se usar o atalho da área de trabalho (caso adicionado) ou buscar o programa no menu Iniciar (procure por swi-prolog).

Caso queira adicionar manualmente o interpretador ao PATH, consulte instalação de programas.

Alternativas para instalar o interpretador em Windows incluem:

Teste de Ambiente

Com o interpretador instalado, pode-se começar a programar em Prolog. Para iniciar o interpretador, use o arquivo executável obtido ou digite swipl seguido por enter em um interpretador de linha de comando (requer configuração de PATH para arquivos baixados manualmente).

swiplWelcome to SWI-Prolog (threaded, 64 bits, version 8.4.0)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit https://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?-

Assim como feito para JavaScript e Python, esta seção apresentará os mesmos exemplos para fins de teste e comparações entre linguagens.

Como em Python, deve-se digitar o código em linguagem Prolog após a interrogação e o hífen (?-).

Por exemplo, para se escrever no console, pode-se usar writeln() (documentação). Para escrever uma mensagem, escreva algo como writeln("Olá! Meu nome é Franco."). após a interrogação e o hífen, e aperte enter. O interpretador escreverá Olá! Meu nome é Franco. e aguardará seu próximo comando. O ponto final (.) após o comando é necessário.

swiplWelcome to SWI-Prolog (threaded, 64 bits, version 8.4.0)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit https://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?- writeln("Olá! Meu nome é Franco.").Olá! Meu nome é Franco.
true.

?-
Exemplo de início e uso do interpretador Prolog na linha de comando. Usa-se `swipl` para iniciar o interpretador; dentro dele, escreve-se o código desejado. A imagem apresenta exemplos de execução do código desta seção.

Doravante, toda vez que você ler um bloco de código em Prolog e quiser executá-lo manualmente no interpretador, basta seguir os passos anteriores.

Para encerrar o interpretador, digite halt. seguindo de enter ou aperte Ctrl d. No Windows, o atalho pode ser Ctrl z seguido de enter (ou pode não funcionar, exigindo o uso de halt.).

Assim como Python, pode-se usar Prolog em modo Read, Eval, Print, Loop (REPL). Por exemplo, X is 1 + 1 calcula uma soma.

X is 1 + 1.

Por outro lado, não é possível escrever diretamente uma cadeia de caracteres.

"Olá! Meu nome é Franco." % Erro.

Entretanto, deve-se notar que, assim como em Python, os usos diretos anteriores são possíveis apenas no interpretador para uso interativo, ou seja, no estilo REPL. Eles são convenientes para inspecionar valores e variáveis, mas não são permitidos em programas. Caso queira fazer o mesmo em um arquivo com código-fonte (um script), você deve usar writeln() para escrever os resultados.

X is 1 + 1, writeln(X).
writeln("Olá! Meu nome é Franco.").

Portanto, convém criar o hábito de usar writeln() quando quiser escrever no console. Por exemplo, crie um arquivo chamado script.pl (você pode escolher o nome que quiser) com o seguinte conteúdo:

main :-
    writeln("Meu Primeiro Script em Prolog"),
    writeln("Olá! Meu nome é Franco."),
    writeln("O interpretador saber fazer contas."),
    write("Veja só: "), X is 1 + 1, writeln(X),
    writeln("Tchau!").

O script introduz uma nova função, chamada write() (documentação), que como writeln(), mas não adiciona uma quebra de linha após o texto.

Para executar seu script, abra um interpretador de linha de comando (shell) no diretório em que ele foi criado e digite swipl -q -f script.pl -t main. O interpretador Prolog executará o arquivo fornecido como parâmetro (o valor script.pl após swipl -q -f) e mostrará os resultados de chamadas de writeln().

swipl -q -f script.pl -t mainMeu Primeiro Script em Prolog
Olá! Meu nome é Franco.
O interpretador saber fazer contas.
Veja só: 2
Tchau!

Caso o diretório atual no interpretador de linha de comando (shell) não seja o diretório do arquivo, você pode mudar para o diretório do arquivo ou pode escrever o caminho absoluto do arquivo. Exemplos de caminho absoluto poderiam ser C:\Users\Franco\Desktop\script.pl para um arquivo na área de trabalho do Windows em uma conta de usuário chamada Franco ou ~/Desktop/script.pl para um arquivo na área de trabalho do Linux.

Execução do arquivo `script.pl` na linha de comando. A imagem ilustra o comando utilizado (`swipl -q -f script.pl -t main`) e os resultados da execução do programa.

Caso não queira usar write() e writeln() para escrever resultados, é possível usar format() (documentação).

main :-
    writeln("Meu Primeiro Script em Prolog"),
    writeln("Olá! Meu nome é Franco."),
    writeln("O interpretador saber fazer contas."),
    X is 1 + 1, format("Veja só: ~d\n", X),
    writeln("Tchau!").

No caso, \n permite adicionar uma quebra de linha, enquanto ~d permite escrever um número inteiro calculado como resultado.

Por fim, é conveniente saber que é possível consultar a documentação sobre uma função usando o REPL. Para isso, pode-se usar a função help().

help(format).4.32 Formatted Write

The current version of SWI-Prolog provides two formatted write predicates. The'writef'  family (
writef/1, writef/2, swritef/3), is compatible with Edinburgh C-Prolog  and should  be considered
deprecated. The'format' family (format/1, format/2, format/3), was defined by Quintus Prolog and
currently available in many Prolog systems, although the details vary.
      (...)

help(format/2).format(+Format, :Arguments)
    Format is an  atom, list  of character  codes, or  a Prolog  string. Arguments  provides the
    arguments required by the format specification. If only  one argument  is required  and this
    single  argument is  not a  list, the  argument need  not be  put in  a list.  Otherwise the
    arguments are put in a list.
      (...)

Para sair da ajuda, pressione q.

Saber usar REPL e executar um arquivo com código Prolog bastam para atividades de aprendizado. De forma geral, elas também são suficientes para a maioria das atividades para uso cotidiano ou profissional da linguagem de programação.

IDEs

As considerações feitas sobre o uso de IDE para Python valem para Prolog. A conveniência, sobretudo importante para iniciantes, continua a ser um benefício do uso de IDEs.

A opção de executar código com um clique também vale para Prolog. Em particular, procure pela opção de executar um projeto com um clique (normalmente sobre um ícone de triângulo (🢒) comumente usado como play, tocar ou reproduzir em eletroeletrônicos) ou com uma tecla (comumente F5). Além disso, lembre-se de atalhos para editores de texto, como Ctrl n para criar novos arquivos (Arquivo / Novo ou File / New em inglês) e Ctrl o (Arquivo / Abrir ou File / Open em inglês) para abrir arquivos existentes.

SWI Prolog

A instalação de SWI Prolog inclui alguns editores e funcionalidades de IDE.

Interpretador em Ambiente Gráfico

A primeira opção é usar o interpretador em ambiente gráfico em modo REPL, acessado usando swipl-win. O programa possui algumas conveniências para carregar arquivos com um menu e pode ser mais fácil de usar que um interpretador de linha de comando.

Uma funcionalidade prática é a opção de consultar arquivos, disponível em File, depois Consult.... A opção permite carregar dados e programas para uso no REPL. Por exemplo, para usar um script Prolog como definido em script.pl, pode-se consultar o arquivo anterior. Em seguida, digita-se no REPL o nome do predicado criado seguido por um ponto final (main.) para avaliar o código definido no script.

Na imagem, o script chama-se hello.pl, mas possui os mesmos conteúdos.

Exemplo de consulta a um arquivo usando o ambiente gráfico de SWI Prolog.

O ambiente gráfico permite usar dois recursos adicionais: PceEmacs e Prolog Navigator.

PceEmacs

Para usar PceEmacs, basta digitar emacs. e apertar enter no ambiente gráfico (swipl-win). PceEmacs é uma implementação alternativa do editor Emacs escrita em Prolog. Assim como Emacs é configurável em Emacs LISP, PceEmacs é configurável em Prolog.

Exemplo de uso de PceEmacs com o código de `script.pl` carregado em um arquivo chamado `hello.pl`.

Para instruções de uso, pode-se consultar a documentação.

Prolog Navigator

O segundo recurso é um menu para listagem de arquivos chamado Prolog Navigator. Para ativá-lo, basta clicar em File, depois em Navigator....

Exemplo de acesso à documentação usando Prolog Navigator.

Além de listar diretórios e arquivos, o navegador permite acessar rapidamente a documentação de predicados usados em programas Prolog. Para isso, pode-se clicar duas vezes sobre o nome do predicado, ou uma vez com o botão direito, seguido da escolha de Manual no menu de contexto.

SWISH Notebooks

De forma semelhante a Jupyter para Python, SWI Prolog fornece SWISH Notebooks. Essa pode ser uma opção para pessoas que gostem de escrever notas enquanto estudam.

SWISH Notebooks também podem ser usados online. Isso pode ser útil, por exemplo, para testar a linguagem antes de instalá-la.

SWI-Prolog-Editor

Uma opção mais próxima de um IDE tradicional é SWI-Prolog-Editor. O programa possui algumas traduções (incluindo Português de Portugal).

Exemplo de uso de SWI-Prolog-Editor com o código de `script.pl` carregado em um arquivo chamado `hello.pl`.

Para usá-lo, deve-se instalar SWI Prolog primeiro. Em seguida, para configurá-lo, clica-se em Window (Janela), depois em Configuration (Configuração). Em Programs (Programas), deve-se ajustar o diretório para Prolog. O diretório padrão de instalação de SWI Prolog em Windows é C:\Program Files\swipl (para a versão 64-bit).

Outras Opções

Outros exemplos de IDEs incluem:

Para outras opções de IDEs, pode-se instalar extensões em alguns programas.

Primeiros Passos para Começar a Programar em Prolog

Os trechos de código a seguir ilustram alguns recursos da linguagem Prolog. Neste momento, não é necessário entendê-los totalmente; o propósito é apresentar recursos e a sintaxe da linguagem.

Existem três formas de usar o código. Você pode:

  1. Digitar (ou copiar e colar) o código diretamente em no interpretador da linguagem;
  2. Escrever e executar o código no IDE de sua escolha;
  3. Escrever o código usando um editor de texto e executar o arquivo criado no interpretador.

Os exemplos são os mesmos adotados para JavaScript. Logo, você poderá comparar linguagens, e observar semelhanças e diferenças entre elas.

Conhecendo Prolog por Meio de Experimentação

Exemplos de uso e saídas dos trechos de código apresentados nesta seção utilizando o interpretador `swipl` para Prolog na linha de comando.
  1. Escrita de texto:

    main :-
        writeln("Uma linha."),
        writeln("Outra linha."),
        writeln("Uma linha.\nOutra linha.").

    Caso você esteja usando Prolog em REPL, não se deve main. Desde que o trechos de código não possuam variáveis, você pode avaliar os códigos linha a linha em um REPL. Por exemplo: writeln("Uma linha."). Lembre-se que o ponto final é importante.

    Também é possível avaliar todas as linhas separadas por vírgulas de uma vez, desde que a última termine em ponto.

  2. Comentários (texto ignorado pelo interpretador; documentação):

    main :-
        writeln("Interpretador processa"). % Interpretador ignora.
    /* <- Aqui começa o comentário.
       Ele pode ter várias linhas.
    Aqui ele termina -> */
    /* Ele também pode começar e terminar na mesma linha. */
    % Contudo, para isso, é mais fácil usar este estilo de comentário.
  3. Cálculos matemáticos:

    main :-
        A is 1 + 1, writeln(A),
        B is 2 - 2, writeln(B),
        C is 3 * 3, writeln(C),
        D is 4 / 4, writeln(D). % O que ocorre caso se tente dividir por 0? Faça o teste!
    • Expressões matemáticas:

    main :-
        X is 1 + 2 - 3 + (4 * 5) / 6,
        writeln(X).

    main :-
        X is 5 ** 2,
        writeln(X).
  • Raiz quadrada (documentação: sqrt()):

    main :-
        X is sqrt(25),
        writeln(X).
  • Operações trigonométricas, como seno (documentação: sin() e pi):

    main :-
        X is sin(pi / 2.0), % Seno.
        writeln(X).
  1. Comparações (true ou yes significa verdadeiro; false ou no significa falso):

    escreva_resultado(X) :- X, writeln("Verdadeiro").
    escreva_resultado(X) :- not(X), writeln("Falso").
    
    main :-
        escreva_resultado(1 =:= 2), % Igual: os dois iguais são necessários!
        escreva_resultado(1 =\= 2). % Diferente: os dois iguais são necessários!
    escreva_resultado(X) :- X, writeln("Verdadeiro").
    escreva_resultado(X) :- not(X), writeln("Falso").
    
    main :-
        escreva_resultado("Franco" == "Franco"),
        escreva_resultado("Franco" \= "Franco"),
        escreva_resultado("Franco" \= "Seu Nome"),
        % Prolog considera que letras minúsculas são diferentes de maiúsculas (e vice-versa).
        escreva_resultado("F" =:= "f"), % Também poderia usar ==
        escreva_resultado("F" =\= "f"), % Também poderia usar \=
        escreva_resultado("Franco" == "franco"),
        escreva_resultado("Franco" \= "franco").
    escreva_resultado(X) :- X, writeln("Verdadeiro").
    escreva_resultado(X) :- not(X), writeln("Falso").
    
    main :-
        escreva_resultado(1 < 2), % Menor.
        escreva_resultado(1 > 2), % Maior.
        escreva_resultado(1 =< 2), % Menor ou igual.
        escreva_resultado(1 >= 2). % Maior ou igual.
  2. Variáveis e atribuição (documentação):

    Variáveis são como caixinhas que armazenam valores colocados dentro delas. Em Prolog, variáveis devem ter a primeira letra maiúscula. Além disso, não há atribuição, mas um processo chamado unificação.

    main :-
        X = 123,
        writeln(X).

    Para cálculos matemáticos, normalmente deve-se usar is ao invés de =. Caso contrário, Prolog unificará a expressão ao invés de calcular o resultado.

    main :-
        Expressao = 123.456 + 987.654,
        writeln(Expressao),
        Resultado is 123.456 + 987.654,
        writeln(Resultado).

    Diferentemente de outras linguagens, um valor unificado não pode ser alterado. Para se unificar uma variável com um novo valor, deve-se criar uma nova variável.

    main :-
        Nome1 = "Franco",
        writeln(Nome1),
        Nome2 = "Franco Garcia",
        writeln(Nome2).
    main :-
        A = "Franco",
        writeln(A),
        B = "Seu Nome",
        writeln(B),
        C = "Outro Nome",
        writeln(C).

    A linguagem também não possui valores lógicos. Como alternativa, pode-se definir símbolos ou fatos (iniciados por letras minúsculas).

    verdadeiro_ou_falso(Expressao, Resultado) :- Expressao, Resultado = verdadeiro.
    verdadeiro_ou_falso(Expressao, falso) :- not(Expressao).
        % o falso no segundo parâmetro % equivale a declarar Resultado e unificar
        % Resultado = falso.
    
    main :-
        ValorLogico1 = verdadeiro,
        writeln(ValorLogico1),
        ValorLogico2 = falso,
        writeln(ValorLogico2),
        X is 1 + 1,
        verdadeiro_ou_falso(X == 2, Y),
        writeln(Y).
  3. Constantes (documentação):

    SWI Prolog não permite criar constantes (outras implementações podem definir). Na realidade, algumas como pi até existem, mas a alternativa idiomática é criar um predicado que forneça o valor.

    pi(3.14159).
    
    main :-
        pi(X),
        writeln(X).
    e(2.71828).
    
    main :-
        e(X),
        writeln(X),
        X = 0. % main falhará, pois não é possível modificar uma variável previamente unificada.
  4. Erros:

    main :-
        writeln(Ooops!), % Texto deve estar entre aspas duplas.
        writel("Nome incorreto para writeln"),
        X is 1 / 0,
        writeln(X),
        Y is 0 / 0,
        writeln(Y).
  5. Cadeias de caracteres (strings) para palavras e texto (documentação):

    main :-
        writeln("Ok, cadeia de caracteres válida"),
        writeln("Ok, outra cadeia de caracteres válida"),
        writeln("Ok, também é uma cadeia de caracteres válida").
    main :-
        format("Para 'misturar' aspas, use diferentes das externas.\n"),
        format("Caso contrário, você precisa escapá-las com uma contrabarra, assim: \". A contrabarra é necessária.\n").
  6. Operações lógicas (documentação):

    Prolog não define operações lógicas. Contudo, é possível especificá-las usando predicados (ou usar uma biblioteca, como a apresentada neste link para documentação).

    % Operando1 and Operando2 = Resultado
    % Operando1    Operando2    Resultado
    e(falso,       falso,       falso).
    e(falso,       verdadeiro,  falso).
    e(verdadeiro,  falso,       falso).
    e(verdadeiro,  verdadeiro,  verdadeiro).
    
    % Operando1  or Operando2 = Resultado
    % Operando1     Operando2    Resultado
    ou(falso,       falso,       falso).
    ou(falso,       verdadeiro,  verdadeiro).
    ou(verdadeiro,  falso,       verdadeiro).
    ou(verdadeiro,  verdadeiro,  verdadeiro).
    
    % not Operando1 = Resultado
    % Operando1       Resultado
    nao(falso,        verdadeiro).
    nao(verdadeiro,   falso).
    
    main :-
        e(verdadeiro, verdadeiro, X), % Operação lógica "e" ("and").
        writeln(X),
        ou(verdadeiro, falso, Y), % Operação lógica "ou" ("or").
        writeln(Y),
        nao(verdadeiro, Z), % Operação lógica "não" ("not").
        writeln(Z).
  7. Condições (documentação):

    nome_navegador("Firefox") :- writeln("Mozilla Firefox").
    
    main :-
        Navegador = "Firefox",
        nome_navegador(Navegador).
    nome_navegador("Firefox") :- writeln("Você usa um navegador da Mozilla"), !.
    nome_navegador(_) :- writeln("Você usa outro navegador.").
    
    main :-
        MeuNavegador = "Seu Navegador",
        nome_navegador(MeuNavegador).
    nome_navegador("firefox") :- writeln("Você usa um navegador da Mozilla"), !.
    nome_navegador("chrome") :- writeln("Você usa um navegador do Google"), !.
    nome_navegador("chromium") :- writeln("Você usa um navegador do Google"), !.
    nome_navegador("edge") :- writeln("Você usa um navegador da Microsoft"), !.
    nome_navegador("safari") :- writeln("Você usa um navegador da Apple"), !.
    nome_navegador("internet explorer") :- writeln("Você deveria usar um navegador mais moderno..."), !.
    nome_navegador(_) :- writeln("Você usa outro navegador.").
    
    main :-
        EuUso = "X",
        string_lower(EuUso, EuUsoMinusculas),
        nome_navegador(EuUsoMinusculas).
  8. Repetições ou laços (documentação):

    para(Fim, Fim).
    para(I, Fim) :-
        I < Fim,
        format("~d\n", I),
        ProximoI is I + 1,
        para(ProximoI, Fim).
    
    main :-
        para(0, 5).
    enquanto(Fim, Fim).
    enquanto(J, Fim) :-
        J < Fim,
        format("~d\n", J),
        ProximoJ is J + 1,
        enquanto(ProximoJ, Fim).
    
    main :-
        enquanto(0, 5).
    repita(Fim, Fim).
    repita(I, Fim) :-
        format("~d\n", I),
        I < Fim,
        ProximoI is I + 1,
        repita(ProximoI, Fim).
    
    main :-
        repita(0, 5).
  9. Funções (documentação):

    Ao invés de funções, Prolog define predicados. Vários exemplos anteriores requiriram o uso de predicados. Predicados permitem definir código correspondente a funções em outras linguagens de programação, mas eles também permitem definir relações para a realização de processamento simbólico.

    minha_funcao(X, Y, Resultado) :- Resultado is X + Y.
    
    main :-
        % Uma função é um bloco de código que realiza um processamento arbitrário
        % conforme definido pela programadora ou pelo programador.
        % Após a definição, pode-se executar a função quando se quiser, por meio
        % de uma chamada de função.
        minha_funcao(12, -34, Z1), % Este é um exemplo de uma chamada de função.
        writeln(Z1),
        minha_funcao(1, 2, Z2),
        writeln(Z2). % Este é outro.
  10. Tipos de dados (documentação):

    main :-
        NumeroInteiro = 1,
        OutroNumeroInteiro = -1,
        NumeroReal = 1.23,
        ValorLogico = verdadeiro, % ou falso; adote uma convenção de dois valores.
        CadeiaCaracteres = "Texto aqui. Quebras de linha usam\nou seja, isto estará\n na terceira linha.".
  11. Entrada (documentação: read_line_to_string(), number_string(), e string_concat()):

    :- use_module(library(readutil)).
    
    main :-
        % Quando se solicitar a entrada de um valor, escreva um e aperte `enter`.
        writeln("Qual é o seu nome? "),
        read_line_to_string(user_input, SeuNome),
        writeln("Quantos anos você tem? "),
        read_line_to_string(user_input, SuaIdadeTexto),
        number_string(SuaIdade, SuaIdadeTexto),
        writeln(SeuNome),
        writeln(SuaIdade),
        % A função concatenate() realiza uma operação chamada concatenação,
        % que combina a segunda cadeira após a primeira.
        string_concat("Olá, ", SeuNome, Ola1),
        string_concat(Ola1, "!", Ola2),
        writeln(Ola2),
        format("Você tem ~d anos.\n", SuaIdade).

Parabéns! Você Já Pode Escrever Qualquer Programa em Prolog

Não acredita? Você pode encontrar a explicação na introdução à linguagem JavaScript.

Em resumo, aprender a sintaxe de uma linguagem não é suficiente para resolver problemas com ela. O aprendizado de lógica de programação e o desenvolvimento de habilidades de pensamento computacional são muito mais importantes que a sintaxe. De fato, quando se tem dúvidas sobre a sintaxe, basta consultar a documentação. Não é preciso decorá-la.

Após aprender uma primeira linguagem de programação, aprender outras linguagens (que adotem paradigmas semelhantes aos da primeira) é relativamente simples. Para constatar a afirmação, pode-se abrir uma nova janela em seu navegador e deixá-la lado a lado com esta. Em seguida, pode-se comparar os blocos de código escritos em Prolog (nesta janela) e em Python (na segunda janela).

Caso se deseje fazer comparações entre mais linguagens de programação, pode-se escolher:

Próximos Passos

Com o ambiente de desenvolvimento configurado, você pode continuar sua jornada de desenvolvimento de sistemas.

Para evitar repetições, recomendo a leitura da página sobre configurações de ambiente para JavaScript. Mesmo que você não tenha interesse na linguagem, muitas discussões são relevantes para quaisquer linguagens de programação. Além disso, você entenderá uma forma de criar páginas para a Internet e poderá criar conteúdo para seu navegador.

Até GDScript (para Godot Engine), os tópicos descrevem configurações de ambientes de desenvolvimento para algumas linguagens de programação. Após GDScript, o foco torna-se conceitos básicos para o aprendizado de programação.

  • Informática
  • Programação
  • Iniciante
  • Dev Env
  • Windows
  • Linux
  • Prolog