Como el proyecto es basicamente de Prolog, aqui solo pondre lo relativo a PHP para no hacer off-topic.
Lo que viene a continuación es una explicación de mi escenario de trabajo, se podría hacer en otras plataformas supongo, pero asi es como lo tengo andando yo:
1) Requerimientos
1.a) Swi-Prolog instalado en una pc con Windows 7.
1.b) Wamp server con php 5.4 o superior.
1.c) PHP debe tener el safe_mode apagado, esto permitira llamar a programas que no se encuentran en la misma carpeta que el php que los llama. En el php.ini hay una directiva para esto que debe estar en Off pero aun asi puede que no funcione, para asegurarte debes agregar esto al final del httpd.conf y reiniciar el servidor:
Código Apache:
1.d) Debes tener agregada la carpeta de binarios de la instalacion de Prolog incorporada en el Path de Windows, por ejemplo en mi caso es: C:\Program Files\swipl\bin, si no sabes como hacer esto, aquí hay un tutorial paso a paso para Windows 7.Ver original
php_admin_flag safe_mode off
1.e) Dentro de la carpeta www del servidor, creare un directorio llamado "prolog" el cual por supuesto puede tener cualquier otro nombre, dentro de este directorio es donde trabajaremos.
2) El Prolog
Dentro de la carpeta del servidor creada anteriormente, vamos a tener un archvo llamado ejemplo.pl con un functor de prueba:
Código prolog:
Ver original
3) La prueba previa de la consola
3.a) Antes de meterte con el PHP por primera vez, debes realizar una prueba de la consola para asegurarte que todos los pasos previos los hisiste bien, sobre todo porque en caso de error, php no explota ni lanza errores/warning/notices ni nada, sigue como si nada pasara con lo cual puede ser muy desconcertante.
3.b) Abres la consola de Windows (Simbolo de sistema o cmd.exe) y alli te diriges a la carpeta de tu servidor escribiendo:
Código BAT:
reemplazando por la ubicacion de donde esta instalado tu wampserver y el nombre de la carpeta que creaste anteriormente.Ver original
cd C:\servidor\www\prolog
3.c) Ahora escribes en la consola el siguiente comando:
Código BAT:
3.d) Si todo esta bien, estaras viendo este mensaje:Ver original
swipl -s ejemplo.pl -g "test." -t halt.
Cita:
caso contrario, deberás revisar que los pasos previos esten correctos.% C:/servidor/www/prolog/ejemplo.pl compiled 0.00 sec, 2 clauses
Prolog
was called
from PHP
successfully.
Prolog
was called
from PHP
successfully.
4) El PHP
4.a) Como punto de partida destacar que a mi no me funcionaron ninguna de las funciones de ejecucion de programas y cuando digo ninguna, me refiero a ninguna de las del manual, todas fallaban, o mejor dicho, "no hacian nada" porque fallar implica un error y PHP no arrojo ni un notice, en lugar de estas funciones, tube que recurrir a el operador de comillas invertidas razon por la cual previamente tuvimos que desactivar el safe_mode con tanto énfasis.
4.b) En la misma carpeta prolog del servidor, donde pusimos a ejemplo.pl vamos a crear un index.php con el siguiente contenido:
Código PHP:
con lo cual deberiamos tener esta salida al ingresar por el navegador:Ver original
<?php $output = `swipl -s ejemplo.pl -g "test." -t halt.`;
Cita:
4.c) El envio de parametros a Prolog es muy simple, si se fijan en el comando que ejecutamos, tenemos esto "test." entre comillas, ahi dentro podemos escribir lo que queramos ya que esa una sentencia que se ejecuta en Prolog de forma directa, podemos pasar listas, variables, otros functores, lo que se quiera.string 'Prolog
was called
from PHP
successfully.' (length=43)
was called
from PHP
successfully.' (length=43)
4.d) La recepcion de respuestas es en forma de texto, asi que debemos asegurarnos de que nuestro prolog retorne su respuesta en un formato que luego podamos desglosar con las funciones de string o expresiones regulares.
El proyecto se encuentra en desarrollo en el repositorio: PHP-Prolog-HTML5-Checkers-Game de GitHub.
Una demo del repositorio funcionando puede encontrarse en este lugar, localizado en un VPS gratuito cortesía de vps.me.
Se resolverán dudas y aceptaran criticas tanto en GitHub como en este tema.
Si te interesa estar al día con los nuevos desarrollos del proyecto o quieres participar en ellos, puedes seguir el proyecto en GitHub y comunicarte directamente con migo para obtener acceso al ftp del vps y hacer experimentos en linea.
Saludos.