2010-08-26 37 views
20

Me estoy desgarrando tratando de encontrar cómo escribir un programa Hello World en Prolog. Sólo quiero crear un programa que se ejecuta así:Hola mundo en Prolog

> ./hw 
Hello, world! 
> 

El problema es que todos los ejemplos que puedo encontrar obras en un REPL, así:

?- consult(hello_world). 
% hello compiled 0.00 sec, 612 bytes 

Yes 
?- hello_world. 
Hello World! 

Yes 

Este es el mismo, incluso con ejemplos de Prolog compilado: el programa aún cae en un REPL. Esto obviamente no es de mucha utilidad para un lenguaje de "propósito general". Entonces, ¿cómo escribo el tradicional Hello World?

+5

¿Dónde están sus virtudes de programación declarativa ahora? MWHAHAHA :) –

+9

No sé, creo que la mayoría de las implementaciones * reales * de Prolog en una aplicación lo utilizan como un lenguaje incrustado para lo que es bueno, en lugar de escribir toda la aplicación (IU, E/S de archivos, control de hardware, etc. ..) en Prolog. – FrustratedWithFormsDesigner

Respuesta

17

El uso de GNU Prolog:

 
$ cat hello.pl 
:- initialization(main). 
main :- write('Hello World!'), nl, halt.

$ gplc hello.pl $ ./hello
Hello World!

+0

FYI, Lo mismo en [SWI-Prolog] (http://www.swi-prolog.org/pldoc/man?predicate=initialization/1) –

2

Prolog no es realmente un de uso general idioma. Lo usamos para diseñar sistemas de inteligencia artificial en la universidad.

Tendría que definir un hecho que responda "hello world".

hello('hello world'). 

Luego, pregunte al hecho:

?- hello(X). 

Sin embargo, dependiendo del compilador de Prolog, que probablemente tienen una regla write(), que se puede utilizar:

?- write('hello world'), nl. 
+1

Esto no responde la pregunta. Es solo otra explicación de cómo ejecutarlo en REPL. Esto es exactamente lo opuesto a lo que OP deseaba saber. Además, el OP ha declarado explícitamente que está frustrado exactamente por el hecho de que hay un millón de explicaciones de cómo ejecutarlo en REPL, pero no hay explicaciones de cómo hacer que haga exactamente lo que uno quiere que haga, es decir, imprimir una cuerda simple –

10

Puede escribir su archivo de origen para iniciar el intérprete de Prolog y salir de él una vez que el código se haya ejecutado. Aquí está un ejemplo usando SWI-Prolog:

#!/usr/bin/swipl -q -t hello_world -f 

hello_world :- write('Hello World'), nl, 
       halt. 

Suponiendo que pones esto en un archivo llamado 'HW', y se establece el permiso de ejecución, se le puede llamar como se desea:

$ ./hw 
Hello World 
$ 
+0

Noté que 'write (3 + 1)' imprime '3 + 1' en lugar de' 4'. ¿Hay alguna forma de imprimir la salida de expresiones aritméticas como esta? –

Cuestiones relacionadas