دمج قائمتين في Prolog يعني وضع عناصر القائمة الثانية بعد الأولى مع حفظ الترتيب والتكرارات. يوضح المثال العلاقة العودية الأساسية، ويمكن استخدام append/3 القياسية بدل تعريفها في برامجك المعتادة.
الكود الكامل في SWI-Prolog
:- module(gc_26598, [concat_lists/3]).
concat_lists([], List, List).
concat_lists([Head|Tail], Other, [Head|Rest]) :-
concat_lists(Tail, Other, Rest).استعلام للتجربة
?- concat_lists([a,b], [b,c], Result).النتيجة Result = [a,b,b,c]. هذا دمج وليس اتحاد مجموعتين.
الحالة الأساسية والاستدعاء الذاتي
دمج القائمة الفارغة مع List يعطي List نفسها. في الحالة الثانية ننقل الرأس إلى الناتج ثم ندمج الذيل مع القائمة الأخرى. عند دمج [a,b] مع [c] يصبح الناتج [a,b,c]؛ لا تُجمع القيم العددية ولا تزال التكرارات.
التكلفة واتجاه الاستعلام
يمر الدمج على القائمة الأولى، فتكون تكلفته مرتبطة بطولها. يمكن تجربة تقسيم قائمة معلومة إلى بادئة ولاحقة عبر متغيرين، لكن توليد قوائم مفتوحة دون قيود قد يعطي بحثًا غير منتهٍ. اختبر القائمتين الفارغتين ووجود تكرار قبل إدخال العلاقة في خوارزمية أخرى.
احفظ التعريفات في ملف بامتداد .pl ثم حمّله في SWI-Prolog. يُكتب الاستعلام عند المحث بعد تحميل الملف، ولا تنسخ الرمز ?- داخل ملف التعريفات. يتضمن الكود اسم module خاصًا بالدرس لتجنب تعارض الأسماء عند تحميل أمثلة متعددة.
الصور والفيديو من الشرح السابق
الكود النصي أعلاه هو النسخة المصححة؛ قد تختلف المواد المرئية السابقة في أسماء المتغيرات أو طريقة التشغيل.







