سؤال
كنت أتساءل، أنا أدرك أنه يمكنك استخدام assert
لإضافة حقائق أو قواعد أو أيا كان ما إذا كنت قد أعلنت أن تكون المسند -:dynamic
, ، ولكن هذا يسمح فقط بالتغييرات التي يتم الاحتفاظ بها في هذه الجلسة فقط، على سبيل المثال إذا قمت بإغلاق نافذة ProLology ثم تضيع تغييرات قاعدة البيانات.
لذلك كنت أتساءل، هل هناك أي طريقة لجعلها assert
و retract
يتسبب المسندات في إجراء تغييرات دائمة في ملف Prolog .pl؟
شكرا
المحلول
أستطيع أن أقترح عليك طريقة بسيطة جدا للقيام بذلك.
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.
ثم إغلاق الجلسة، إعادة فتح.
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.
لا تنتمي إلى StackOverflow