2009-12-03 23 views
5

Sono nuovo di Prolog e finora ho imparato come definire un predicato in un file e la corsa l'interprete di usarlo. Ma vorrei sapere se c'è un modo per definire il predicato al prompt? - in modo che non debba passare avanti e indietro.Come definire un predicato nel prologo

il modo in cui lo sto facendo ora è come questo

file di defs.pl:

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

nell'interprete prologo:

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

EDIT forse significava come definire 'fatti' non ne sono sicuro.

risposta

9

È possibile utilizzare il assert/1 predicato:

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

EDIT: A proposito, questo non funzionerà se si tenta di combinare con predicati definiti in un file. Quindi, o definire tutti adiacenti/2 predicati nel file, sono tutti di definire con assert nella riga di comando.

Se si vuole definire alcuni dei predicati nel file, e altri con assert, quindi dichiarare nel file che il predicato è dinamico:

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

Si può fare

?- consult(user). 

o

?- [user]. 

e inserire le clausole dopo che, quindi terminare l'input con la fine del file ch aracter (Ctrl-D in Linux, potrebbe essere Ctrl-Z in MS-Windows). Questo è equivalente alla lettura di un file, vedere the documentation of consult/1.

asserzione/1 e retrarre/1 sono destinati predicati che vengono modificate dinamicamente dal codice (cioè per memorizzare dati globale), non per la programmazione normale.

+0

Sono d'accordo che è probabilmente quello che sono progettati per, ma non vedo il problema di utilizzare questi (dal momento che sono disponibili) per testare in modo rapido e imparare prologo. Le spese generali non dovrebbero essere una preoccupazione. Mentre penso che la soluzione è più pulita, si richiede inoltre di digitare nuovamente tutti i predicati che già definite quando si vuole aggiungere di più. – catchmeifyoutry

Problemi correlati