Eu aprendi Prolog há muitos anos na Universidade. Durante minha vida profissional, nunca precisei usar o Prolog. Perdi algo especial?
Tanto quanto me lembro, o Prolog requer uma mentalidade completamente diferente em comparação com linguagens de programação importantes.
O Prolog é realmente usado para implementar algo profissionalmente útil?
programming-languages
prolog
Gursel Koca
fonte
fonte
Respostas:
Na minha opinião, aprender o básico do Prolog vale muito a pena, independentemente de você usá-lo no mundo real. Também vale a pena entender as idéias básicas subjacentes à unificação e como uma implementação (trivial e ineficiente) pode ser tratada.
Se você tiver um problema que seria melhor resolvido usando lógica declarativa, idealmente deveria reconhecer isso e saber (se tiver a opção) de usar as ferramentas certas para esse trabalho.
No entanto, concordo que o Prolog precisa de uma mentalidade muito diferente das linguagens imperativas convencionais e também de uma mentalidade muito diferente das linguagens funcionais. Além de um certo ponto, parece exigir muita experiência (assim como com qualquer coisa), e há ainda muito conhecimento em "livros didáticos" que faz meu cérebro escorrer pelos meus ouvidos.
Minha impressão é ... estamos provavelmente tanto especial algo que falta a um grau, mas não seria prático para dedicar o tempo a aprender até mesmo um conhecimento de nível livro razoavelmente completo para Prolog, muito menos tentando desenvolver experiência no mundo real , a menos que você esteja considerando uma possível carreira em programação lógica.
Recentemente, li um livro sobre IA e sistemas especializados publicado em 1989 - um achado de sorte em uma livraria de segunda mão. Em parte significativa, é um tutorial especializado sobre Lisp e Prolog. É verdade que a maior parte do que ele cobre não é tão impressionante há algum tempo (pesquisa, heurística etc.), mas ainda é muito interessante, e a IMO é uma coisa interessante para se investir um pouco de tempo.
Livros mais recentes que descrevem especificamente o Prolog seriam melhores para aprender o idioma, mas o risco é que seu cérebro escorra dos ouvidos em algum lugar do material intermediário ao avançado.
fonte
Não fui eu, mas assumindo que a pergunta poderia ser "alguém implementou algo sério com prólogo?" isso pode contar:
http://asmarterplanet.com/blog/2011/02/the-watson-research-team-answers-your-questions.html
fonte
Eu sei que os programadores de IA o usam ... porque fiz um curso de Prolog na minha aula de IA, mas, além disso, não vi muita coisa a dizer sobre isso. Aqui está uma pergunta semelhante com muitas respostas! /programming/130097/real-world-prolog-usage
fonte
Prolog é ótimo para uma prototipagem rápida. Por exemplo, em http://www.cri.ensmp.fr/classement/doc/A-381.pdf, uma transformação SSA para GCC é implementada primeiro no Prolog e depois em C.
Estou usando o Prolog dentro de compiladores para uma implementação rápida e suja de sistemas de tipos, certas otimizações e verificações semânticas e reescrevo esse código do Prolog em algo imperativo apenas se seu desempenho não for aceitável.
fonte
Você respondeu rapidamente, mas eu usei o Prolog em meados dos anos 90 para projetar calculadoras de taxas de seguros que determinariam para nós determinados segmentos de clientes (risco de leitura) que se encaixariam nas taxas premium. É algo que você não necessariamente vê no dia-a-dia, mas certamente afetou seus prêmios de P&C ao longo dos anos.
fonte
De acordo com (Esta FAQ) 1 Partes do Watson, a máquina IBM que tocava o Jeopardy, foram escritas em prólogo. (veja a pergunta 6)
fonte
Eu usei o Prolog profissionalmente em várias ocasiões (significativas) (sistema especialista em diagnóstico; transformação HTML; associação de conjuntos). Tenho uma profunda afeição pelo idioma. Sim, existe um viés aqui, mas é fácil ser objetivo sobre quando o Prolog é (mais ou menos) adequado - você realmente precisa processar estruturas recursivas ; o melhor exemplo que posso dar é uma tabela de banco de dados relacional, mas existem inúmeros outros exemplos (provavelmente é mais fácil enumerar contra-exemplos, como entrada aleatória do usuário ou (a maioria) funções matemáticas (no entanto, muitas funções matemáticas têm uma estrutura recursiva e, portanto, são perfeitamente apropriados (transformação rápida e discreta de Fourier, por exemplo)).
Mas, é claro, pouquíssimos 'sistemas de ponta a ponta' podem ser definidos apenas em termos do processamento de estruturas recursivas (exceção: prova do teorema - mas este é um exercício bastante acadêmico *), portanto, é uma sorte que um processo de prólogo pode ser enxertado em um 'processo imperativo mais padrão' usando todo tipo de técnicas diferentes (dificilmente importa o que, mas uma interface de serviço da web provavelmente é geralmente adequada); para que você possa lidar com a interface do usuário, com o processamento de eventos aleatórios, etc., e então entregar quando necessário (para fazer consultas complexas ao banco de dados ou qualquer número de coisas que você queira fazer com suas estruturas recursivas). Acho que funciona lindamente - melhor do que, por exemplo, LINQ.
Então, agarre suas estruturas recursivas pelos bits sensíveis e escreva um Prolog adorável, limpo, elegante e sustentável! :)
PS quando não estou usando o Prolog, volto ao c #
fonte
Tente escrever um solucionador de sudoku no seu idioma favorito e verifique como isso é feito no Prolog. Em geral, qualquer problema de CLP combina bem com uma linguagem declarativa como o Prolog.
Também é usado extensivamente na verificação formal de hardware e software (academicamente e provavelmente profissionalmente, mas não tenho nenhuma referência a empresas).
Finalmente, Erlang é profundamente influenciado pelo Prolog, com tolerância a falhas e simultaneidade em mente.
fonte
O software que lê e classifica grande parte do correio nos EUA e em vários outros países é escrito em Prolog, usando um compilador altamente otimizado. A sintaxe dos endereços de correio é escrita em gramáticas de cláusulas definidas, o que facilita a manutenção e simplifica a adaptação do leitor às convenções de vários países e usuários industriais. Os serviços postais geralmente possuem conjuntos de regras complicados sobre coisas como endereços de encaminhamento, caixas postais e endereços, etc., e essas regras também são formuladas no Prolog para facilitar a manutenção.
fonte