مقدمة في العمليات على القوائم
بما أننا في الموسوعة العربية للكمبيوتر والإنترنت خصصنا دروس قسم الذكاء الاصطناعي للغة الـLisp وهي اختصار لـList Processing، ستفيدنا هذه المقدمة في استيعاب أسلوب البرمجة في الذكاء الاصطناعي وفن التعامل مع القوائم إن شاء الله.
محتوى الدرس:
- الدوال والبيانات Function & Data.
- القوائم Lists.
- العمليات على القوائم ومفهوم تنفيذها List Processing & EVAL Notation.
أولاً: الدوال والبيانات Function & Data:
لو نظرنا إلى الشكل التالي والذي يمثل دالة للضرب أدخلنا لها ثلاث مدخلات، وطلب منّا وصف هذا الشكل.. فكيف سنصفه؟

هناك عدة طرق للوصف:
- الوصف من جهة المدخلات: فنقول أن هناك ثلاث بيانات مدخلة لدالة الضرب التي ستقوم بعملية ضربهم وإعادة الناتج.
- الوصف من جهة المخرجات: فنقول أن الدالة ستعيد إلينا 30 نتيجة ضرب ثلاثة أرقام هي 2، 3 و5.
- الوصف من وجهة نظر المبرمج: وهنا سنقول أن لدينا دالة وظيفتها هي الضرب، تأخذ عدد من المدخلات وتعيد إلينا الناتج.
ما يهمنا هنا كمبرمجين هو الوصف من وجهة نظر المبرمج، هنا تكمن فكرة العمليات على القوائم.
ولو نظرنا إلى الشكل التالي:

نلاحظ أننا حصلنا على نفس النتيجة ولكن باستخدام الدالة مرتين، في المرة الأولى أخذت بيانين كمدخلين، وفي المرة الثانية أخذت البيان الثالث مع نتيجة المرة الأولى كمدخلين.
كذلك، يمكننا استخدام أكثر من دالة بنفس الطريقة كما يوضح الشكل التالي:

والسؤال هنا: كيف تتم كتابة قائمة لهذا الوصف؟! لابد من أن نتعرف على القوائم وتركيبها للإجابة على هذا السؤال.
ثانياً: القوائم Lists:
س/ ماهي القائمة؟
القائمة هي مجموعة من العناصر التي وضعت داخل قوسين، نفصل بين كل عنصر والآخر بواسطة مسافة فقط، من الممكن أن تكون العناصر عبارة عن قوائم أخرى.
أمثلة:
- (RED GREEN BLUE) : قائمة بها ثلاث عناصر.
- (2 3 5 7 11 13 17) : قائمة بها سبعة عناصر.
- (MOHD 3 MAKKAH 459) : قائمة بها أربعة عناصر وتمثل سجل لشخص.
- ((BLUE SKY) (GREEN GRASS) (BROWN EARTH)) : قائمة تتكون من ثلاث عناصر كل عنصر عبارة عن قائمة من عنصرين.
- ( ) أو NIL : قائمة فارغة!
وتوضح الأشكال التالية دالة جاهزة في لغة الليسب اسمها Length تأخذ قائمة كمدخل وتخرج لنا عدد العناصر في هذه القائمة:

ثالثاً: العمليات على القوائم ومفهوم تنفيذها List Processing & EVAL Notation:
قبل بدء رحلتنا مع لغة الليسب، لابد من أن نتعرف على مفهوم مرن يدعى "EVAL notation" وفيه نستبدل المربعات بالقوائم عند تمثيل الدوال، حيث نلاحظ أن:
- أي مفهوم برمجي يمثل بواسطة المربعات نستطيع تمثيله بسهولة بواسطة Eval notation.
- Eval notation سهل الطباعة باستخدام لوحة المفاتيح، على عكس المربعات.
- في لغة الليسب: هذا المفهوم يسمح لنا بكتابة دوال تقبل دوال آخرى كمدخلات، كما سنتعرف في الدروس القادمة.
هذا المفهوم يعتبر القلب النابض في لغة الليسب، وظيفته هو التعبيرعن العمليات بواسطة القوائم في هذه اللغة، يتم هذا التعبير بذكر الدالة function أولاً ثم تتبعها مجموعة المدخلات الخاصة بها في القائمة. مثال: لو كتبنا التعبير التالي:
(* 2 3 5)
والذي يقابل أول مثال ذكرناه في درسنا:

وهنا نقول:
the expression (* 2 3 5) evaluates to 30.
وبهذا الاسلوب تكتب الأكواد والبرامج بلغة الليسب، سنتعرف على هذه اللغة بالتفصيل في الدروس القادمة إن شاء الله، وماهذا الدرس سوى مقدمة لمفهوم العمليات على القوائم.
رحلة سعيدة مع الـLisp أتمناها لكم.