Prolog - ASSERT and RETRACT

匿名 (未验证) 提交于 2019-12-03 01:52:01

问题:

I was wondering, I am aware you can use assert to add facts or rules or whatever if you have declared the predicate to be -:dynamic, but this only allows the changes that are made to be kept in that session only, e.g. if you close the Prolog window then the database changes are lost.

So I was wondering, is there any way of making it so that the assert and retract predicates can make permanent changes to the Prolog .pl file?

Thanks

回答1:

I can suggest you a very simple way of doing this.

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. 

Then close session, reopen.

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. 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!