Quais são os melhores usos de Programação em Lógica?
-
03-07-2019 - |
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 ?
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 ??li>
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 clpfd 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
clpB .
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
clpq .
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.