سؤال

أنا جديد على Prolog، لكني عالق في هذا الأمر الذي يفترض أنه بسيط.لقد قمت بتحميل قاعدة المعرفة بدون أخطاء ، وكلما حاولت القيام بها يجزم (وحتى يساعد) أحصل على الرسالة التالية:

uncaught exception: error(existence_error(procedure,assert/1),top_level/0)
{2}

ما الذي أفتقده بالضبط؟مُقدَّر.

هل كانت مفيدة؟

المحلول

يستخدم assertz/1 أو asserta/1 بدلاً من.لا يوفر GNU-Prolog assert/1 لأن فقط asserta/1 و assertz/1 يتم تعريفها في المعيار.

لاحظ أنه في حين asserta/1 كان دائمًا له معنى تفسيري واحد واضح أضف الجملة في البداية, ، معنى assertz/1 كان حلها أكثر صعوبة لأن عبارة "إضافة فقرة في النهاية" لا تحدد بشكل كامل دلالات الأهداف التي تم الاستناد إليها قبل تأكيد البند.

مع ISO-Prolog، الأهداف التي تم استدعاءها من قبل assertz/1 (لكن أيضا retract/1) تظل غير متأثرة.ويعرف هذا باسم عرض التحديث المنطقي.للاقتباس من المعيار (ISO/IEC 13211-1:1995):

7.5.4 تحديث قاعدة البيانات المنطقية

أي تغيير في قاعدة البيانات يحدث نتيجة
تنفيذ هدف (على سبيل المثال، عندما يقوم منشط a
الهدف الفرعي هو دعوة ل assertz/1 أو retract/1) سوف يؤثر
فقط التنشيط الذي يبدأ تنفيذه بعد ذلك.ال
لن يؤثر التغيير على أي تنشيط موجود حاليًا
يجري تنفيذها.

ملاحظة - وبالتالي يتم تجميد قاعدة البيانات أثناء تنفيذ
هدف، وقائمة الجمل التي تحدد الإسناد ثابتة في
لحظة تنفيذها (انظر 7.7.7هـ).

لاحظ أنه في DECsystem 10 Prolog، أحدث الدليل فرقًا كبيرًا بين assert/1 و assertz/1.في الاقتباس التالي من دليل مستخدم DECsystem 10 لعام 1978، المصطلح تم تعريف التنفيذ يمكن أن يعني فقط ما هو معروف في المعيار يعتمد التنفيذ (يعني غير محدد في الأساس).

5.5 ميتا منطقية

...

assert(C)

المثيل الحالي ل C يتم تفسيره على أنه شرط ويتم إضافته
إلى البرنامج المفسر الحالي (مع المتغيرات الخاصة الجديدة
استبدال أي متغيرات لم يتم التحقق منها).موقف الجديد
البند ضمن الإجراء المعني محدد بالتنفيذ.
C يجب إنشاء مثيل له إلى غير متغير.

asserta(C)

يحب assert(C), ، إلا أن البند الجديد يصبح الأول
شرط الإجراء المعني.

assertz(C)

يحب assert(C), إلا أن البند الجديد يصبح الأخير
شرط الإجراء المعني.

اليوم أيضًا هناك أنظمة حيث assert/1 و assertz/1 اختلف.على سبيل المثال، .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top