Hay dos conceptos de concurrencia en Prolog. Uno está vinculado a multithreading, el otro a objetivos suspendidos. No estoy seguro de lo que quieres saber. Así que voy a ampliar un poco sobre multihebra primero:
Hoy en día, el sistema Prolog ampliamente disponible se puede diferenciar si son multiproceso o no. En un sistema Prolog multiproceso, puede generar múltiples hilos que se ejecutan simultáneamente sobre la misma base de conocimiento. Esto plantea algunos problemas para consulta y predicados dinámicos, que son resueltos por estos sistemas Prolog.
Puede encontrar una lista de los sistemas Prolog que se multiproceso aquí:
Operating system and Web-related features
multihilo es un prerequesite para diversos paradigmas de paralelización. En consecuencia, los sistemas Prolog individuales proporcionan constructos que sirven a ciertos paradigmas. Los paradigmas típicos son la agrupación de subprocesos, por ejemplo, se usa en servidores web o genera un subproceso para tareas de GUI de larga ejecución.
Actualmente no existe un estándar ISO para una biblioteca de subprocesos, aunque ha habido una propuesta y cada sistema Prolog tiene típicamente bibliotecas enriquecidas que proporcionan sincronización de subprocesos, comunicación de subprocesos, depuración de subprocesos e hilos de código extranjeros.Un cierto progreso en la recolección de basura en el sistema Prolog fue necesario para permitir aplicaciones con hilos que tienen hilos de ejecución potencialmente infinitamente largos.
Algunas capas existentes incluso permiten paradigmas de paralelización de alto nivel en un sistema independiente de Prolog. Por ejemplo, Logtalk tiene algunas construcciones que se asignan a varios sistemas Prolog objetivo.
Ahora pasemos a objetivos suspendidos. Desde sistemas Prolog más antiguos (desde Prolog II, 1982, de hecho) conocemos el comando freeze/2 o las directivas de bloqueo. Estos constructos obligan a un objetivo que no debe ampliarse mediante cláusulas existentes, sino que se pone en una lista de espera. El objetivo puede ser despertado más tarde. Dado que la ejecución de la meta no es inmediata sino solo cuando se despierta, las metas suspendidas a veces se ven como objetivos concurrentes, , pero la mejor idea para esta forma de paralelismo serían las corrutinas.
Los objetivos suspendidos son útiles para implementar sistemas de resolución de restricciones. En el caso más simple, la lista dormida es un atributo variable. Pero un nuevo enfoque para los sistemas de resolución de restricciones es reglas de manejo de restricciones. En las reglas de manejo de restricciones, las condiciones de activación pueden suspenderse en los patrones de pares de objetivos. La disponibilidad de restricción de la solución, ya sea a través de objetivos suspendidos o reglas que las restricciones se puede ver aquí:
Overview of Prolog Systems
Saludos
+1 para dar una respuesta reflexiva, haciendo hincapié en que las implementaciones estándar de Prolog no son concurrentes (en el sentido de paralelismo inherente) por diseño. Su cariño por el lado negativo de esta moneda quizás requiera un poco de equilibrio en el otro lado, así que tal vez voy a intentarlo. – hardmath
Sí, me encantaría escuchar el otro lado. Estoy aceptando esto como la respuesta, sin embargo, decir que el paralelismo es muy difícil es un escape. Gran respuesta, sin embargo. – alejandro5042
No quiero parecer polémico allí, gracias por la respuesta :) – alejandro5042