Escuché que la programación lógica puede servir como una alternativa de propósito general a otros paradigmas de programación como OO o programación funcional. (¡Ya que Prolog es Turing completo, esto debe ser así!)
Sin embargo, tengo problemas para ver cómo se implementaría un programa interactivo, como un simple juego gráfico de consola en Prolog o en un lenguaje similar. Tiene hechos, reglas que pueden derivar más hechos y consultas que recuperan hechos. Es fácil ver cómo puede usar esos elementos básicos para crear algo como un solucionador de sudoku. Pero, ¿qué hay de Pac-man, o más simplemente, Pong?
TENGA EN CUENTA: no estoy buscando detalles de bajo nivel, sino una descripción conceptual. (Por ejemplo: en términos de alto nivel, ¿cómo manejaría las E / S? ¿Cómo almacenaría el estado del juego? ¿Cómo implementaría algo como un "ciclo principal"? ¿Cómo mediría y respondería al paso del tiempo? )
fuente
Respuestas:
El estado de seguimiento del juego no es diferente al estado de seguimiento en cualquier otro programa Prolog. Usted define hechos y luego los usa para tomar decisiones. Es bastante antiguo, pero el artículo Exploring Prolog: Adventures, Objects, Animals and Taxes hace un buen trabajo al explicar cómo podría funcionar esto en un juego. Resumido del artículo:
Más allá de eso, necesita una biblioteca de gráficos y E / S. Puede haber distribuciones comerciales de Prolog que las incluyan. Estoy más familiarizado con SWI Prolog , por lo que sugeriré plOpenGL como punto de partida. No solo le da acceso a las capacidades de renderizado de OpenGL, sino que también incluye enlaces para eventos de mouse y teclado. Por ejemplo, para manejar una pulsación de la tecla Escape, define una regla de teclado como esta:
Eche un vistazo al ejemplo de luz en movimiento de plOpenGL para obtener más detalles y un ejemplo del manejo del movimiento del mouse.
Si usa una biblioteca de gráficos, probablemente manejará el ciclo del juego por usted. Básicamente, invierte el control en la biblioteca y proporciona reglas para que se ejecuten cuando sea apropiado: configuración, repintado, eventos de E / S, etc. Si desea limitar FPS o ejecutar código condicionalmente en función del tiempo, puede realizar un seguimiento del tiempo transcurrido usando la hora / fecha predicados y tomar decisiones en consecuencia.
Hay muchos sabores de Prolog, por lo que esta no es la única forma de crear un juego. Las diferentes distribuciones y lenguajes relacionados utilizarán diferentes bibliotecas / enlaces que pueden fomentar diferentes enfoques. Además, los programadores políglotas pueden alentarlo a utilizar un lenguaje de host / tiempo de ejecución más "amigable con los gráficos" para administrar el renderizado y la E / S mientras usa Prolog para modelar los comportamientos de las entidades del juego y la toma de decisiones.
fuente
write
) en un "predicado lógico" parece desviar el concepto bastante lejos.Además de la respuesta de Corbin : en general, el estado puede almacenarse / recuperarse en Prolog utilizando los predicados afirma / retraer. Pero hay muchas opciones no estándar como guardar en RDF, XML, bases de datos relacionales, etc. Si desea GUI, un ejemplo es XPCE ofrecido por SWI-Prolog.
Tenga en cuenta que aunque implementar un juego completo en Logic Programming es un buen ejercicio, en la práctica su rendimiento sería inadecuado y es por eso que proveedores como SWI-Prolog ofrecen enlaces a lenguajes de nivel inferior (por ejemplo, Java, C ++, etc.). Incluso implementar un simple solucionador de Sudoku requiere el uso de bibliotecas CLP .
fuente