سؤال

كنت أتساءل، أنا أدرك أنه يمكنك استخدام 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.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top