Prolog

Origem: Desciclopédia, a enciclopédia livre de conteúdo.
Ir para: navegação, pesquisa


Cquote1.png Prefiro Ruby... A cor do Ruby é tão linda, eu só uso Ruby no meu Apple! Cquote2.png
Programador EMO sobre Prolog

Cquote1.png Eu devia ter me matriculado no curso de Lisp Cquote2.png
Aluno de Prolog

Cquote1.png Quantos programadores Prolog são necessários para trocar uma lâmpada ? Cquote2.png
Você sobre Prolog
Cquote1.png Yes Cquote2.png
Prolog sobre pergunta acima

Descrição[editar]

Prolog é uma linguagem de programação inventada para criar programas lógicos. A intenção, pelo menos, era essa, mas como é uma linguagem puramente declarativa, sem nenhum comando, não deu certo. Ainda assim, Prolog é melhor que Java.

Prolog está para Lisp assim como Visual Basic está para COBOL: faz a mesma merda, só que mal feita.

Criador do programa.

História[editar]

A linguagem foi inventada pelo programador francês Alain Cornomanso depois de ser reprovado num curso de Lisp. O programador escocês David Marrento escreveu um compilador para o Prolog. Misturar destilado com vinhodor de cabeça e deu no que deu.

Sintaxe[editar]

A sintaxe do Prolog se destaca pela total ausência de comandos babacas e inúteis, tais como os for, if, then, else, etc que são tão usados em outras linguagens. Existe o sinal de "=", mas ele não funciona como você pensa. Se você digitar o seguinte comando num interpretador Prolog:

X = 3+2

ele responde:

X = 3+2
yes

Como podemos ver, Prolog é uma linguagem bastante fácil de usar, pois não tenta te enrolar com resultados.

Existem muitas versões da sintaxe porque cada vez que seu criador tem uma ideia é porque estava mamado e a ideia parecia boa, mas no dia seguinte ele não lembra de nada.

Exemplos de Programas em Prolog[editar]

Hello, World[editar]

Não existe programa Hello, World em Prolog porque não há lógica em dizer Alô para o mundo. Como consequência disto, não existe nenhum programa em Prolog porque o primeiro programa que todos escrevem em qualquer linguagem é o Hello, World e se ninguem escreve o primeiro programa não consegue escrever os demais, isso é lógico.

Concatenação de Listas[editar]

Se existisse um programa para concatenar duas listas em Prolog, ele seria assim:

append([], Ys, Ys).
append([X|Xs], Ys, [X|Zs]) :- append(Xs, Ys, Zs).

Demais Programas[editar]

Agora que você acha que já sabe concatenar duas listas em Prolog, você pode criar uma hipótese de que vai escrever outro programa nessa linguagem (o único problema é sair da hipótese):

 eliza :- write('Escreva qualquer merda'), nl, !, repeat, readln(Entra), eliza(Entra).
 eliza([X]) :- member(X, [tchau, end, bye, quit, halt]), !, print('Foda-se. Vá à merda.'), nl.
 eliza(In) :- gera_saida(In, Sai), reply(Sai), !, fail.
 gera_saida([eu, sou | R], S) :-
append(['há quanto tempo você é'], R, T),
append(T, [?], S).
 gera_saida(L, S) :-
parente(X),
member(X, L),
append(['você quer falar de'], [X], T),
append(T, [?], S).
 gera_saida([eu, gosto| R], S) :-
append(['alguém mais na sua família gosta'], R, T),
append(T, [?], S).
 gera_saida(L, ['você sempre pensa assim ?']) :-
subset([eu, acho], L).
 gera_saida(_, ['fale mais sobre isso.']).
 parente(pai).
 parente(mãe).
 parente(irmão).
 parente(irmã).
 parente(filho).
 parente(filha).
 parente('Ricardão').
 reply([H| T]) :- print(H), print(' '), reply(T).
 reply([]) :- nl.
 next(., []) :- !.
 next(X, [X| Y]) :- read_list(Y).
 troca([seu| Resto], [meu| Resto1]) :- troca(Resto, Resto1).
 troca([sua| Resto], [minha| Resto1]) :- troca(Resto, Resto1).
 troca([meu| Resto], [seu| Resto1]) :- troca(Resto, Resto1).
 troca([minha| Resto], [sua| Resto1]) :- troca(Resto, Resto1).
 troca([você| Resto], [eu| Resto1]) :- troca(Resto, Resto1).
 troca([eu| Resto], [você| Resto1]) :- troca(Resto, Resto1).
 troca([],[]).
 troca([Y| Resto], [Y| Resto1]) :- troca(Resto, Resto1).
 apos(X, [X| L], L).
 apos(X, X, _) :- fail, !.
 apos(X, [Y| L], R) :- apos(X, L, R).

Entendeu? Não? Então vá estudar algo mais útil como C ou C++ ou Python.

Aplicações práticas do Prolog[editar]

Sendo uma linguagem lógica, Prolog é bem adaptado para fazer inferências lógicas. Por exemplo, pode-se demonstrar a existência de fadas, baseando-se em estudos do Professor Doutor Denzel Q. Croker, usando Prolog:

 ?- 2 + 2 = 4.
 No
 ?- 2 + 2 = Fish.
 Fish = 2+2
 Yes

O que prova claramente que fadas existem.