2009-12-03 20 views
5

Soy nuevo en Prolog y hasta ahora he aprendido a definir un predicado en un archivo y ejecutar el intérprete para usarlo. Pero me gustaría saber si hay una forma de definir el predicado en el prompt? - para que no tenga que cambiar de un lado a otro.Cómo definir un predicado en el prólogo

la forma en que estoy haciendo ahora es como esto

archivo defs.pl:

adjacent(1,2). 
adjacent(1,3). 

en el intérprete de prólogo:

?- consult('defs.pl'). 
% defs.pl compiled 0.00 sec, 122 bytes 
true. 
?- adjacent(1,2). 
true. 

EDITAR tal vez significaba cómo definir 'hechos' No estoy seguro.

Respuesta

9

Puede utilizar el predicado assert/1:

?- assert(adjacent(1,4)). 
true 

EDIT: Por cierto, esto no funcionará si intenta combinarlo con los predicados definidos en un archivo. Defina todos los predicados adyacentes/2 en su archivo, y defínelos todos con assert en la línea de comando.

Si desea definir algunos de los predicados en el archivo, y otros con afirmar, entonces declarar en su expediente que el predicado es dinámica:

% file contents 
:- dynamic(adjacent/2). 
adjacent(1,2). 
adjacent(1,3). 
4

Usted puede hacer

?- consult(user). 

o

?- [user]. 

y entrar en las cláusulas después de eso, y luego terminar la entrada con el fin de ch archivo aracter (Ctrl-D en Linux, podría ser Ctrl-Z en MS-Windows). Esto es equivalente a leer un archivo, vea the documentation of consult/1.

assert/1 y retraer/1 están destinados a predicados que cambian dinámicamente por el código (es decir, para almacenar datos globales), no para la programación normal.

+0

Acepto que probablemente sea para lo que están diseñados, pero no veo el problema de usarlos (ya que están disponibles) para probar y aprender rápidamente el prólogo. Gastos generales no deberían ser una preocupación. Aunque creo que su solución es más limpia, también requiere que vuelva a escribir todos los predicados que ya definió cuando quiera agregar más. – catchmeifyoutry

Cuestiones relacionadas