Question

Je me demandais, je suis conscient que vous pouvez utiliser assert pour ajouter des faits ou des règles ou quoi que si vous avez déclaré le prédicat à -:dynamic, mais cela ne permet que les modifications apportées à garder à cette session que, par exemple si vous fermez la fenêtre Prolog alors les modifications de base de données sont perdues.

Alors je me demandais, est-il possible de faire en sorte que les prédicats assert et retract peuvent apporter des changements permanents au Prolog .pl fichier?

Merci

Était-ce utile?

La solution

Je peux vous suggérer une façon très simple de le faire.

1 ?- assert(a(1)).
true.

2 ?- assert(a(2)).
true.

3 ?- assert(a(3)).
true.

4 ?- a(A).
A = 1 ;
A = 2 ;
A = 3.

5 ?- tell('a_db.txt'), listing(a), told.
true.

Alors la fermeture de session, ouvrez à nouveau.

1 ?- a(A).
ERROR: toplevel: Undefined procedure: a/1 (DWIM could not correct goal)
2 ?- ['a_db.txt'].
% a_db.txt compiled 0.00 sec, 516 bytes
true.

3 ?- a(A).
A = 1 ;
A = 2 ;
A = 3.

4 ?- listing(a).
:- dynamic a/1.

a(1).
a(2).
a(3).

true.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top