لماذا لا نستخدم لغات البرمجة الاعتيادية مثل لغة c او بيسك او كوبول في حل مسائل الذكاء الاصطناعي بدلا من لغات الذكاء الاصطناعي مثل prolog ؟.
في حقيقة الامر نحن نستطيع استخدام هذه اللغات في حل مسائل الذكاء الاصطناعي ولكن هذه الحلول
لن تكون بالمستوى المطلوب.
السبب هو ان هذه اللغات تكون من النوع الاجرائي(procedural language) اي ان المبرمج يجب ان يخطط الاحداث بشكل
خطوات ثم يقوم بكتابة الاكواد لهذه الخطوات والكومبيوتر سيتبع هذه الخطوات لحل المسئلة المطلوب حلها.
بمعنى اخر ان لغات البرمجة الاجرائية تكون من النوع الموجه بالماكنة (machine oriented).
اما في لغات الذكاء الاصطناعي فقد تم استبدال العديد من التقنيات الاجرائية بطرق البرمجة التصريحية
(declarative programming approach) .
المصطلح "تصريحي" او (declaration) يعني انك تستطيع ان تصف للكومبيوتر العلاقات المنطقية التي تصف
المسالة المطلوب حلها.
لكي تصف لغة الذكاء الاصطناعي العلاقات المنطقية للمسالة فانها تستخدم :
1-الحقائق(facts) : هي عبارة توضح العلاقة بين واحد اوكثر من الاشياء.
مثال الحقائق : Ali lives in iraq
فنحن هنا قمنا بالتصريح عن حقيقة.
2-القواعد(rules) : هي عبارات اكثر عمومية عن الاشياء والعلاقات بينها.
مثال القواعد : If someone lives in iraq (he\she) might know ali
هنا قمنا بالتصريح عن قاعدة .
لذلك فالبرمجة بلغات الذكات الاصطناعي تتضمن :
1-كتابة الحقائق عن الاشياء وعلاقاتها.
2-انشاء القواعد عن الاشياء وعلاقاتها.
3-اعطاء المسالة ل(Turbo brolog) مثلا لحلها.
من فوائد اللغات من النوع (declaration) انهاتسمح لنا بالعمل على مستوى ارقى , فبدلا من التفكير بالمنطق الذي
سيتبعه الكومبيوتر لحل المسالة نستطيع التركيز على علاقات المسالة الحقيقة والتي يمكن ان تستخدم لايجاد الحل.
كذلك من فوائدها ان برامجها تكون مضغوطة اكثر من برامج اللغات الاجرائية فبضع صفحات من السطور البرمجية يمكن استبدالها ببضع سطور برمجية فقط !.
لناخذ مثلا على ذلك لعبة المتاهة
المطلوب هو البدء من نقطة البداية وصولا الى الهدف دون المرور بالمسارات الممنوعة
المسارات المسموحة ستكون :
15 <-16 <- 12 <- 8 <- 7 <- 6 <- 3
في لغات البرمجة الاجرائية يجب كتابة كودات لكل الخطوات الضرورية
مثلا يجب كتابة كودات لمعرفة هل هذه الحركة مسموحة ام لا كذلك يجب كتابة كودات تبين هل تم الوصول الى الهدف ام لا.
بمعنى اخر يجب انشاء هيكل بياني يضم كل المعلومات الضرورية مثل المسارات والتي تمثل بشكل مصفوفة ثم يتم كتابة خوارزمية لحل المسالة.
هنا تظهر مشاكل اللغات الاجرائية بشكل واضح , فمثلا اذا اردنا تغيير او زيادة ابعاد المتاهة فاننا سنظطر لاعادة بناء
هيكل البيانات و والخوازمية وبالتالي اعادة بناء البرنامج بالكامل.
اما في اللغات التصريحية فاننا ببساطة نقوم بتعريف الحقائق(facts) (في هذه المسالة الحقائق هي المسارات) ثم نقوم بانشاء القاعدة(rule) التي ستستخدم للبحث لذلك فان اي تغيير في ابعاد المتاهة لن يؤثر على القاعدة(rule) بل ان التاثير سيشمل الحقائق(facts) فقط .