Ouvi dizer que a programação lógica pode servir como uma alternativa de uso geral a outros paradigmas de programação, como OO ou programação funcional. (Como o Prolog está completo com Turing, deve ser assim!)
No entanto, estou tendo problemas para ver como seria possível implementar um programa interativo, como um jogo gráfico simples de console no Prolog ou um idioma semelhante. Você tem fatos, regras que podem derivar mais fatos e consultas que recuperam fatos. É fácil ver como você pode usar esses elementos básicos para criar algo como um solucionador de sudoku. Mas e o Pac-man, ou mais simplesmente, Pong?
ATENÇÃO: Não estou procurando detalhes de baixo nível, mas uma visão geral conceitual. (Por exemplo: em termos de alto nível, como você lida com a E / S? Como você armazena o estado do jogo? Como você implementa algo como um "loop principal"? Como você mede e responde à passagem do tempo? )
fonte
Respostas:
O rastreamento do estado do jogo não é diferente do rastreamento do estado em qualquer outro programa Prolog. Você define fatos e os usa para tomar decisões. É bem antigo, mas o artigo Explorando Prolog: Aventuras, Objetos, Animais e Impostos explica bem como isso pode funcionar em um jogo. Resumido do artigo:
Além disso, você precisa de uma biblioteca de gráficos e E / S. Pode haver distribuições comerciais do Prolog que as incluam. Estou mais familiarizado com o SWI Prolog , por isso vou sugerir o plOpenGL como ponto de partida. Além de fornecer acesso aos recursos de renderização do OpenGL, também inclui ligações para eventos de mouse e teclado. Por exemplo, para pressionar uma tecla Escape, defina uma regra do teclado da seguinte maneira:
Veja o exemplo de luz móvel do plOpenGL para mais alguns detalhes e um exemplo de como lidar com o movimento do mouse.
Se você usar uma biblioteca de gráficos, ela provavelmente lidará com o ciclo do jogo para você. Basicamente, você inverte o controle na biblioteca e fornece regras a serem executadas quando apropriado: configurar, repintar, eventos de E / S, etc. Se você deseja limitar o FPS ou executar o código condicionalmente com base no tempo, pode rastrear o tempo decorrido usando hora / data predicados e tomar decisões em conformidade.
Existem muitos sabores de Prolog, portanto essa certamente não é a única maneira de criar um jogo. Distribuições diferentes e idiomas relacionados usarão bibliotecas / ligações diferentes que podem incentivar abordagens diferentes. Além disso, os programadores poliglotas podem incentivá-lo a usar um idioma / tempo de execução mais "amigável aos gráficos" para gerenciar a renderização e a IO enquanto usa o Prolog para modelar comportamentos e tomadas de decisão de entidades do jogo.
fonte
write
) em um "predicado lógico" parece distorcer bastante o conceito.Sobre a resposta de Corbin : Em geral, o estado pode ser armazenado / recuperado no Prolog usando os predicados assert / retrair. Mas existem muitas opções não padronizadas, como salvar em RDF, XML, bancos de dados relacionais, etc. Se você deseja GUI, um exemplo é o XPCE oferecido pelo SWI-Prolog.
Observe que, embora a implementação de um jogo completo na Programação Lógica seja um bom exercício, na prática seu desempenho seria inadequado e é por isso que fornecedores como o SWI-Prolog oferecem ligações a linguagens de nível inferior (por exemplo, Java, C ++ etc.). Mesmo a implementação de um simples solucionador de Sudoku requer o uso de bibliotecas CLP .
fonte