Pergunta

Por lógica de programação eu quero dizer a um sub-paradigma das linguagens de programação declarativas. Não confunda essa pergunta com "Quais os problemas que você pode resolver com if-then-else?"

A linguagem como Prolog é muito fascinante, e vale a pena aprendizagem em prol da aprendizagem, mas eu tenho que saber o que classe de problemas do mundo real é melhor expressa e resolvido por uma tal linguagem. Existem melhores línguas? Será que a lógica de programação exist por outro nome em linguagens de programação mais modernos? É a versão cínica da resposta uma variante do Python Paradox ?

Foi útil?

Solução

Prototipagem .

Prolog é dinâmico e tem sido há 50 anos. O compilador é liberal, o minimalista sintaxe, e "fazer coisas" é fácil, divertido e eficiente. SWI-Prolog tem um built-in marcador (depurador!) , e até mesmo um gráfica tracer . Você pode alterar o código em tempo real, usando make/0, você pode carregar dinamicamente módulos, adicionar algumas linhas de código sem deixar o intérprete, ou editar o arquivo que você está executando atualmente na mosca com edit(1). Você acha que encontrou um problema com o predicado foobar/2?

?- edit(foobar).

E assim que você sair do editor, essa coisa vai ser compilado-re. Claro, Eclipse faz a mesma coisa para Java, mas Java não é exatamente uma linguagem de prototipagem.

Além do material prototipagem puro, Prolog é incrivelmente bem adequado para traduzir um pedaço de lógica no código . Então, provadores automáticos e esse tipo de coisa pode facilmente ser escrito em Prolog.

O primeiro intérprete Erlang foi escrito em Prolog - e por uma razão, uma vez que Prolog é muito bem adaptado para a análise, e que codifica a lógica que você encontrar em árvores de análise . Na verdade, Prolog vem com um built-in analisador! Não, não é uma biblioteca, é na sintaxe, ou seja, DCG s .

Prolog é muito utilizada em PNL, particularmente na sintaxe e semântica computacional .

Mas, Prolog é subutilizada e subestimado. Infelizmente, parece ter um acadêmico ou "inutilizável para qualquer finalidade real" estigma. Mas ele pode ser colocado para uso muito bom em muitas aplicações do mundo real que envolvem fatos e o cálculo das relações entre fatos. Não é muito bem adaptado para processamento de números, mas CS não é apenas sobre o número crunching.

Outras dicas

Desde Prolog = sintática Unificação + Backward encadeamento + REPL ,

a maioria dos lugares onde a unificação sintática é usado também é um bom uso para Prolog.

sintáticas usos unificação

  • AST transformações
  • Tipo Inference
  • Term reescrever
  • Teorema provando
  • processamento de linguagem natural
  • A correspondência de padrões
  • Combinatória geração de casos de teste
  • sub estruturas Extrato de dados estruturados, como um documento XML
  • Computação simbólica ou seja, o cálculo
  • bancos de dados dedutivos
  • Os sistemas especialistas
  • Inteligência Artificial
  • Análise
  • linguagens de consulta

Restrição de Programação em Lógica (CLP)

Muitos casos muito bons e bem-suited uso de lógica de programação já foram mencionados. Gostaria de complementar a lista existente com várias tarefas de uma extremamente importante área de aplicação da programação lógica:

lógica de programação combina perfeitamente, mais facilmente do que outros paradigmas, com restrições , resultando em um quadro chamado Restrição de Programação em Lógica .

Isto leva a solucionadores de restrição dedicados para diferentes domínios , tais como:

  • CLP (FD) números inteiros
  • CLP (B) Booleans
  • CLP (Q) racional números
  • CLP (R) ponto flutuante fortes números.

Estas solucionadores de restrição dedicados levar a vários casos de uso importantes da lógica de programação que não tenham yeen foram mencionados, alguns dos quais eu mostro abaixo.

Ao escolher um sistema Prolog, a potência eo desempenho de seus solucionadores de restrição são muitas vezes entre os fatores decisivos, especialmente para usuários comerciais.

CLP (FD) - Raciocínio sobre inteiros

Na prática, CLP (FD) é uma das aplicações mais imporant de lógica de programação, e é usado para resolver tarefas a partir das seguintes áreas, entre outros:

  • programação
  • alocação de recursos
  • planejamento
  • Otimização Combinatória

Veja para mais informações e vários exemplos.

CLP (B) - restrições booleanas

CLP (B) é muitas vezes usado em conexão com:

  • SAT resolução
  • Circuito de verificação
  • contagem combinatória

.

CLP (Q) - Números racionais

CLP (Q) é usado para resolver importantes classes de problemas que surgem em Operations Research :

  • programação linear
  • linear inteira programação
  • inteira mista linear de programação

.

Prolog é ideal para problemas não numéricos. Este artigo dá alguns exemplos de algumas aplicações de Prolog e que poderia ajudá-lo a compreender o tipo de problemas que poderia resolver.

Uma das coisas Prolog lhe dá de graça é um algoritmo de busca retrocesso -. Você poderia implementá-lo, mas se o seu problema é melhor resolvido por ter esse algoritmo disponível, então é bom usá-lo

As duas coisas que eu vi ele ser bom em se provas matemáticas e compreensão da linguagem natural.

Prolog é grande em resolver quebra-cabeças e afins. Dito isto, no domínio do quebra-cabeças que torna fácil / médio de quebra-cabeça mais fácil e mais complicado de resolver quebra-cabeças mais difícil. Ainda assim, escrevendo solucionadores de enigmas grade e similares, tais como Hexiom, Sudoku, ou Nurikabe não é especialmente difícil.

Uma resposta simples é "sistemas de compilação". A linguagem utilizada para construir Makefiles (pelo menos, a parte para descrever dependências) é essencialmente uma linguagem de programação lógica, embora não seja realmente uma "pura" linguagem de programação lógica.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top