الذكاء الصناعي & لغة Lisp

Lost|pages

حارس المخطوطات
طاقم الإدارة
المشاركات
2,034
مستوى التفاعل
6,019
السلام عليكم
103742860-Domgy1.530x298.jpg
قبل عدة سنوات شدني موضوع الذكاء الصناعي وقمت بالدخول لهذا العالم المختلف وهو بحر عظيم بمختلف مجالاته المتعددة وتخصصاته تماما, وقد أحببت هذا المجال بسبب البرمجة التي كانت السبب في دخولي لهذا العالم المتطور. إن لغات البرمجة مختلفة جدا في صيغ تراكيب جملها. أما الذكاء الصناعي فهو بحد ذاته لا يشبه تلك اللغات لأن لغته تختلف عن عائلة اللغات المتعارف عليها وحتى أن صيغ كتابة الكود أيضا.

إن علم الذكاء الصناعي يدخل في مجال الهندسة المعلوماتية ومن بين اللغات التي عملت عليها هي لغة البرولوج Prolog والليسب Lisp, إلى الآن لست محترفا فيها ولكن سنبدأ بفتح الباب حول هذا المجال ومن أراد الدخول فيه يجب عليه أن يملك الرغبة القوية والإرادة. هناك الكثير من المهندسين العرب من يملكون معرفة قوية في هذا المجال ولكن بحسب معرفتي المتواضعة لم أرى مشاريع قوية جدا وضخمة تخص الوطن العظيم. سوى سرقة العقول المفكرة ونقلها للغرب.

من أهم مجالات هذا العلم والذي أميل إليه أكثر هو مجال الروبوتات الآلية وشهدت الآونة الأخيرة تطورا عسكريا متسارعا في مجال الذكاء الصناعي ومثال على ذلك الطائرة من دون طيار والربوت Nao. وسيكون هذا الموضوع مخصص للذكاء الصناعي وكل ما هو جديد وحتى الكورسات والدروس ستجمع هنا في هذا المكان لكي يكون من السهل الوصول والتعلم. الموضوع عبارة عن دورة حول لغة قديمة جدا ظهرت في حقبة الخمسينات من القرن الماضي، ما يميز هذه اللغة أنها لا تتبع أحد ولذلك سيكون الهدف هو فتح الباب للمتعلم والباحث العربي لكي يسبر أغوار هذه اللغة الأنيقة الجميلة المناسبة المريحة في كتاباتها بعيدة عن التعقيد المتعارف عليه اليوم، عالم الربوتات الآلية جميل جدا وعلينا أن لا ننظر له على أنه شر كما يصور لنا ولكن نسخر هذه العلوم في خير الإنسانية.

nao-and-pepper-crdit-aldebaranld-400xx1067-1067-0-67.jpg

 
Screenshotfrom2017-10-1506-23-26.jpg
سنتعلم في هذه الدورة حول لغة ليسب العريقة، الدورة مبسطة إلى أبعد الحدود وسهلة حتى لمن ليس لديه أية خلفية حول البرمجة. سنتعرف على تاريخ اللغة بشكل درامي لأنني قمت سابقا بترجمة مقاطع من عدة كتب لتوضيح حقيقة هذه اللغة. أي أن مازلنا في المجال النظري لها ولابد لي من تأسيسكم بشكل ممتاز لخوض غمار تعلم لغة ليسب.

أعلم أن أغلبكم سيسأل ما إذا كانت هذه اللغة مناسبة لواقعنا وسوق العمل!! بحسب علمي تقريبا نعم لأنني قرأت عدة مقالات حول تأيد البعض لها ورفض البعض الأخر، سبب التأيد هو إحياء العصر الذهبي لها وأما سبب رفض البعض هو أن هناك العديد من اللغات على الساحة. الحقيقة أن هذه اللغة تحمل سرا وهو أن متعلمها سيصل حد الإدمان عليها عكس كل اللغات الأخرى وستعلمون ما معنى كلمة (أنيقة) والسر الأخر أن هذه اللغة لا تعتمد على أحد من اللغات الأخرى فهي تكون نفسها وهي تصلح نفسها.
 
التعديل الأخير:
Screenshotfrom2016-09-0712-18-13.jpg

إذا كانت لغة الليسب Lisp بهذه العظمة, لماذا لا يستخدمها الكثير من الناس؟

إن لغة الليسب Lisp لها مستقبل واعد والكثير من الشركات تستخدمها ودليل الويب يعتمد عليها في المستقبل, قد يظن البعض أن الأمر لا يستحق كل هذا العناء. ولكن ما هو سبب السمعة الغير جديرة لها؟

أعتقد أن الناس يتخذون من ذلك قاعدة عامة في تعلم ما يستحق في الحياة, وينقسمون إلى ثلاث فئات:
- فئة تتعلم ما يتعلمه الأخرون(كلغة السي ++).
- فئة تتعلم ما هو سهل.
- فئة تتعلم ما له قيمة.

إن لغة الليسب Lisp لا تندرج تحت هذه الفئات, إنها ليست شعبية كحساب التفاضل والتكامل. بإختصار نقول للشخص العاقل أن يبقى بعيدا عنها لأننا في طريقنا للتخلص من هذه القواعد, حيث إن لغة الليسب سوف تعطيك نظرة ثاقبة حول مدى جدية البرمجة الغير عادية حتى لو تطلب الأمر بعض الجهد. قد لا تكون مقتنعا ولكن مع التقدم سوف تلاحظ مدى قوة هذه اللغة والميزات التي تجعلها مختلفة عن باقي اللغات والبرامج.

لغة الليسب Lisp صممت خصيصا للأفكار البرمجية المعقدة ولك الحرية في كتابة أي برنامج لأي مشكلة تقع في يدك. إن القوة التي تمتلكها في أصابع يدك هي ما يجعل اللغة مختلفة بمجرد حصولك على هذه اللغة إعتبر نفسك قد تغيرت إلى الأبد كمبرمج. وحتى لو توقفت بشكل نهائي عن كتابة أكوادها فبمجرد تعلمها من جديد ستغيرك حتما.

إن تعلم لغة برمجة لهو مشابة لتعلم أي لغة أجنبية, إفترض أنك خرجت وقررت تعلم اللغة المسمارية فقد تتعلم من هنا وهناك وربما تأخذ مواد دراسية أو تذهب إلى بغداد, بغض النظر عما تفعله فإن تعلمك لها يبقى محدودا غير مكتمل وحتى في أحلامك ربما تتحدث بلغة بلدك.

لكن لغة الليسب Lisp مختلفة. إنها ليست مثل تعلم أي لغة أجنبية, بمجرد تعلمك إيها ستراها في أحلامك, إن لغة الليسب Lisp مثل فكرة قوية تزاحم كل خبراتك في البرمجة وتصبح هي اللغة الأم المسيطرة! وما أن تواجهك أي فكرة جديدة في إي لغة برمجة, ستقول لنفسك دائما " كل هذا أستطيع عمله في لغة الليسب Lisp بلا إستثناء" هذه القوة التي يمكن أن تعطيها لك لغة الليسب Lisp.


حقيقة من أين جاءت هذه اللغة؟

إن أسرة لغة الليسب Lisp قديمة حقا truly ancient, وبالرجوع للتاريخ فهي حقا مختلفة عن باقي اللغات. نحن حقا بحاجة للسفر بعيدا للوراء للوصول إلى بداية كل هذا. منذ زمن بعيد (بالرجوع إلى عام 1940) غطى الأرض محيط عملاق يدعى محيط بنثلاسيك Panthalassic Ocean جنبا إلى جنب مع كتلة قارية واحدة هائلة تدعى بانجيا Pangaea, و في تلك الكتلة القاحلة التي لا ترحم كانت برامج الكمبيوتر تكتب بلغات الآلة النقية(من الأصفار والآحاد).

كانت تلك اللغات محكمة لأنظمة الكمبيوتر الخاصة, مثل ENIAC و زوس Z3 ذات أنابيب مفرغة, كانت تلك الحواسيب بدائية حيث كانت البرمجة حينها عبارة عن تقليب المفاتيح وتصحيح الكابلات فقط لإرسال كود واحد لكل عملية, كانت أياما مظلمة شهدت الكثير من التجارب والأنفجارات وكانت اللغات تعاني للنجاة وما أن يموت أحدها حتى يزدهر الأخر.:confused:

في الصورة تحت نرى الحقبة 40 إلى 50 والمخلوقات تمثل اللغات القديمة التي تكافح من أجل البقاء أما اللغات الحرة السهم على اليمين نراها قد تقدمت عنهم.
ssssss.jpg


في ذلك الوقت كانت الكمبيوترات تخزن بياناتها داخل الذاكرة جنبا إلى جنب مع المجمعات البدائية التي كانت تسمح بكتابة الكود(الرمز البرمجي) على شكل نصوص text. في تلك الأثناء كانت لغة التجميع assembly أكثر فعالية, حيث سمحت للغات القديمة من الهروب من الحيوانات المفترسة في ذلك المحيط للنجاة, ومع ذلك لازال للغة التجميع قيود كبيرة. لقد تم تصميمها حول معطيات معينة ولم تكن محمولة على آلات مختلفة. لكي تتطور لغات البرمجة وتكون على قيد الحياة لابد لها من الخروج من حدود الآلة ومجموعة تعاليمها.

شهد عام 1950, ظهور أول لغة مستقلة عن الآلة وتدعى Autocode. لم تكن مستقلة فقط من ناحية الرجلين والرئتين ولكن حتى نوعية برامجها كالمترجمات compilers والمفسرات interpreters. ومع هذين تطورت الصيغة النحوية للبرامج وأصبحت تكتب بلغة قريبة ودية للإنسان. يقوم المترجم compilers بأخذ الكود المكتوب بلغة الإنسان وتحويله إلى لغة الآلة وتعرف بالصيغة الثنائية 0 و 1 لكي تتمكن الآلة من فهمها وتنفيذها. ولأول مرة قام المبرمجون بتصميم برامج كمبيوتر أكثر نشاطا دون اللجوء إلى الأنابيب العملاقة البدائية.
 
التعديل الأخير:
هنا في هذه المرحلة تم تصميم لغات برمجة أكثر نجاحا حول فكرة مركزية واحدة, حيث كان التصميم عاما وبناء الجمل كان أكثر سهولة للمبرمجين المبتدئين ومع ذلك فاللغات الجيدة أصبحت صعبة, ومن هذه اللغات الفورتران FORTRAN, البيسك BASIC و السي C. في الحقيقة كانت مجرد خليط من الأفكار القديمة ونسخت بعضها من بعض بحيث فقدت الجمال الحقيقي لها. ربما تكون سهلة بطرق سطحية ولكن هذه اللغات الشرسة جابت الغابات طوال عقود للبحث عن فريسة سهلة.

كان هناك مخلوقات متخفية منذ ظهور أول آلة مستقلة على الأرض, كانت هذه اللغات تستخدم لبناء الجمل الرياضية كحساب التفاضل والتكامل التي طورت من خلال علماء الرياضيات آن ذاك. ربما تكون واقعية وسهلة, ومن الجمل الرياضية الذكية تم تطوير مخلوق يدعى : لغة الليسب Lisp. هذه اللغة لم تتطور من لغة الفورتران FORTRAN أو من لغات أخرى, لقد كانت سلالة الليسب Lisp منفصلة جاءت من الرياضيات ولكن من أين جاءت لغة الليسب Lisp؟ يدعي بعض الناس أن القصة حول أصول لغة الليسب Lisp قد ضاعت مع غياهيب الزمن, والبعض الاخر يقول إن جون مككارثي John McCarthy عام 1959 هو من قام بإختراعها في معهد ماساتشوستس للتكنولوجيا.

عندما نشر مككارثي McCarthy فكرته كان الغرض منها إكتشاف فكرة في الجمل الرياضية, ولكن سرعان ما بدأت لغة الليسب Lisp في التطور والعمل على المترجمات compilers والمفسرات interpreters. وقد تجلى هذا في الكمبيوترات الحقيقية, تماما مثل لغة الفورتران FORTRAN وغيرها من اللغات. لكن! على عكس هذه اللغات فقد حافظت لغة الليسب Lisp على جمالها المستمد من الأصل الرياضياتي. ومع ظهور أول لغة ليسب Lisp فقد قام المبرمجون بإلتقاط هذا المخلوق المطيع وتحويله من لغة بدائية إلى متفرعة وقد ظهرت نسخ منها MACLISP و Interlisp.
d11.jpg

على الرغم من نجاح الصيد المبكر لمبرمجين الليسب Lisp إلا أن ذلك أدى لظهور منافس شرس على الساحة وهم الكروماغنين Cro-Magnons كانوا أكثر عدوانية على مبرمجين الليسب Lisp بحيث هجموا على مشاريع تطوير البرمجيات بإستخدام لغة الكوبول COBOL المخيفة والتي طورت من أجل الأعمال التجارية. كانت لغة الكوبول COBOL قبيحة ودنيئة ولكنها مربحة للكروماغنين Cro-Magnons, بيد أن مبرمجين الليسب Lisp كان لديهم محتوى فكري أنيق.

ومع ذلك فقد عاش الليسبيين Lispers والكروماغنين Cro-Magnons جنبا إلى جنب في وئام نسبي.كان الليسبيين Lispers في إزدهار بسبب إستفادتهم من البحوث العلمية العالية في مجالات التعرف على الصور والمشاكل التي تندرج تحت مظلة الذكاء الصناعي artificial intelligence (AI).

d22.jpg

وقد أستفاد اللسبيين Lispers من هذا التطور في بناء برامج وأنظمة حاسوبية أكثر تقدما للهجوم عليهم, حيث أصبح يمثل لهم العصر الذهبي الليسبي, ولكن هذا الأنجاز الذهبي لم يدم حيث تجري الرياح بما لا تشتهي السفن, فقد إلتفت الرياح على اللسبيين Lispers الفقراء. وفي عام 1980 حدث ميل مفاجىء للأرض وتغير المناخ مما تسبب بنقص في مصادر الطعام للسبيين Lispers اللازمة لبقائهم. لقد جفت جميع بحوث الذكاء الصناعي وأصيبوا بخيبة أمل كبيرة لفقدانهم أجهزة خاصة للغة الليسب Lisp. لقد أصبح العالم مكانا غير مرحب به لمبرمجين لغة اللسيب Lisp, وخيم الشتاء الصناعي AI winter عليهم وتم الحكم على الليسب Lisp بالفشل.
d44.jpg

لقد أعطى هذا ميزة للكروماغنين Cro-Magnons في السباق البرمجي, فقد ظهرت لغات مستمدة من الفورتران FORTRAN والبرمجة الكائنية كما في السي ++ التي ظهرت في عام 1983, مما أعطى للكروماغنين Cro-Magnons حصانة ضد الشتاء الصناعي AI winter الذي عانى منه اللسبيين Lispers ولكن ما حدث أن الكروماغنين Cro-Magnons كانوا مراوغين فقد كانوا قد إقترضوا بعض من أفكار اللسبيين Lispers و قاموا برأب صدع المشاكل التي حدثت في لغاتهم.

في نهاية المطاف وخلال هذا الجهد الكبير, قام الكروماغنين Cro-Magnons بترويض لغات العصر الذهبي إلى سي شارب والجافا ولغات مماثلة. نشأ إعتقاد بأن هذه اللغات هي أكثر متعة بسبب أدواتها من أي شي في الماضي, بما أن العصر الذهبي للغة الليسب Lisp قد أصبح في طي النسيان منذ فترة طويلة. وفي الآونة الأخيرة, فقد صقلت لغات مثل البايثون وروبي من قبل الكروماغنين Cro-Magnon بشكل حديث.

لكن ماذا حدث لمبرمجين الليسب Lisp خلال كل هذا الوقت؟:nomouth:
هل استسلموا للشتاء الصناعي AI winter ؟
هل يختبؤن في الظل في إنتظار يوم مشمس آخر؟

لا أحد يعلم بالتحديد, ربما تجدونهم في أعالي الجبال أو في عمق الأدغال أو في الطابق السفلي لمعهد ماساتشوستس MIT, فقد تم القبض على مخلوق غريب البعض يدعوه بـ Windigo وينديغو أو ذو القدم الكبيرة ومن يعرفون بالأمر ليس لديهم شك في أنه مبرمج ليسب Lisp programmer.
d55.jpg
 
التعديل الأخير:
المقدمة Introduction
لغة الليسب Lisp Programming Language
main-qimg-6cf57f1bd0b351d3430f9242fa171d98.jpg
تعتبر لغة الليسب Lisp من اللغات ذات المستوى العالي, والمصطلح Lisp يشير إلى List Processing Language, أي لغة القوائم المتصلة. وهي لغة تعبيرية Expression ليست كباقي اللغات البرمجية الأخرى. ما معنى تعبيرية؟ أي أن الكود يكتب على شكل تعبيرات. قام جون مكارثي John McCarthy بإختراع هذه اللغة سنة 1958, وهي مناسبة جدا للذكاء الصناعي, حيث تقوم بمعالجة المعلومات الرمزية بكفاءة. ومن أشهر النسخ القياسية المتعارف عليها حسب المعيار الأمريكي هي لغة الليسب المشتركة Common LISP, وطورت خلال عشر سنوات من بداية 1980 إلى 1990. لتوحيد مجموعة الأعمال التنفيذية. خلفا لـزيتا ليسب zetalisp و تطبيق ليسب الجديد New Implementation of LISP (NIL) etc.

وتعتبر لغة الليسب Lisp language, لغة مشتركة, سهلة ممتدة لا محدودة من ناحية التنفيذ. والبرامج المكتوبة بلغة الليسب المشتركة لا تعتمد على آلة محددة الخصائص.
 
رغم كرهي للذكاء الصناعي وكرهي الشديد للروبوتات الا انني ساتابع دورتك لاسباب مهمة ذكرتها رغم انه مازال غير مقتنع بان اتعلم لغة من الصفر قد لا استفيد منها لكنني ساتابع لسببين لان اللغة نادرة ولانها مؤخوذة من نظرية رياضية مختلفة والاسباب المعلومات اللي حضرتك ذكرتها مازالت غير مضمونة... مثلا اذا اردت بناء موقع ايه يضمنلي لو جاني واحد وقال لي ما ينفع المواقع فقط في PHP & JAVASCRIPT ولو اردت بناء نظام تشغيل بيجيني واحد يقول لي اسمبلي وبعدين c++
يعني الخلاصة حضرتك بتقول اللغة الكل في واحد وانا حتى لا اعرف كيف ابرمج الIOS بالJAVASCRIPT
واما الذكاء الصناعي فيحتاج لC++

تقبل مروري f2f2

طبيعي أن تكره شيئا تم برمجتك به بشكل سلبي وجعلك تنظر له من خلال الاعلام والأفلام، الاستخدام السي للذكاء الاصطناعي هي المشكلة وليس تعلمها، وهي مفيدة في حال قمنا بإستغلال هذا العلم بشكل مفيد.

تستطيع تعلم لغات مناسبة لسوق العمل بجانب لغة ليسب، ليس شرطا أن يطلب منك مديرك في العمل القيام بأمور بواسطة ليسب. هنا في الدوره نتعلم هذه اللغة ونعرف مدى قوتها وما يمكن أن نفعل بها مستقبلا. حقيقة لن أقول بك إنني صممت بها مواقعا أو برامج بها وما أود إيصاله هو أن نتقن أساسياتها وبعد ذلك نعمل على إنشاء مكتبات لها. اللغات الأخرى تعتمد على مكتبات وأكواد مبرمجة سابقا تسهل على المصممين وتوفر الوقت والجهد لإنجاز اي مشروع.

ما جعلني أختارها هو أمل أن تكون هذه اللغة محط إهتمام المبرمجين العرب وبناء تكنولوجيات حرة تناسب تفكيرهم.
 
البرمجة واللغات البشرية
identity_division.png

نحن البشر نتواصل فيما بيننا عبر لغات تعلمناها منذ الصغر لكي نعبر عن الأشياء ونتميز بالعديد من اللغات المتنوعة واللغة أداة تواصل فيما بيننا، حتى الحيوانات لها لغات خاصة بها لا نعلمها ولكن ما نعرفه عنها هو إختلاف أصواتها. إن البشر لديهم مليارات الخلايا العصبية في الدماغ لتخزين المعلومات ومعرفة الأشياء. حتى إن تعلم لغة جديدة يمكننا من التواصل مع أناس آخرين من دول بعيدة. والسؤال هنا هل للآلات لغة؟

نعم، إن الآلات ليست ذكية فهي مصنوعة من قبل الإنسان من مواد تشمل الحديد والألومينيوم والبلاستيك وبعض الدارات الكهربائية، ما يجعلها ذكية هو برمجة الإنسان لها وتسخيرها في خدمته. إن تعلم اللغات يأخذ منا شهورا لإتقانها كذلك لغات الحاسوب لابد من الإنتظام في تعلمها وبذل الجهد والوقت والترتيب وتدوين الدروس عند الشروع في تعلمها.

ما هي البرمجة؟ كلمة برمجة لا تتعلق بالحاسوب لوحده، إذ إن المزارع مبرمج والخباز كذلك مبرمج. كيف ذلك؟
معنى كلمة برمجة في علم الحاسوب هو إعطاء أوامر للحاسوب للقيام بعمل ما، وهذا ما يعلمه أغلبية المبرمجين. كذلك المزارع والخباز. إن البرمجة تمر بمعادلة بسيط وهي:

أوامر برمجية ----> معالجة ----> برنامج

كذلك المزارع
بذور ----> تربة خصبة(معالجة) ----> محصول

كذلك الخباز
طحين ----> فرن(معالجة) ----> خبز

لكي نتواصل مع الحاسوب لابد لنا من لغة يفهمها. الحاسوب لا يفهم لغة الإنسان لأنه آلة ولكن اليوم هناك الكثير من لغات البرمجة التي تمكننا من التواصل مع الحاسوب وكذلك الإنسان أبدع كثيرا إلى أن وصل به الأمر في جعل الآلة ذكية وتتحاور معه بشكل مشابه للحديث مع البشر. الحاسوب يتكون من دارات إلكترونية كهربية ولغة الكهرباء هي الصفر والواحد. كيف؟

4-4b.jpg
كلكم لديه في المنزل مفاتيح لتشغيل التلفزيون والمكيف والثلاجة، في عالم الحاسوب رمز التشغيل يمثل بالرقم واحد ورمز الإطفاء يمثل بالرقم صفر. أي أن مفتاح التشغيل هو حاسوب صغير لديه مهمتين واحدة تشغيل والأخرى وإطفاء واحد وصفر. هل علمتم الأن عدد الآحاد والأصفار في الحاسوب؟ إنها بالمليارت، إن كل ضغطة زر وتحريك مؤشر الفأرة يحدث من ورائكم أن الحاسوب يقوم بمهام كثيرة لا تعلمونها وتحمل في الدارات الكثير من الآحاد والأصفار.
giphy.gif

لكي نتواصل مع الحاسوب علينا تعلم لغة خاصة به والحاسوب ليس كالبشر حيث أن الأنسان عندما يتحدث لإنسان آخر يحمل صوته الكلمات عبر الأذن إلى الدماغ ويقوم بتحليل تلك اللغة كي يفهمها. أما الحاسوب ليس كذلك لأنه آلة والآلة لابد لنا من إدخال أوامر وهذه الأوامر تعتبر لغة الحاسوب كي يقوم بتحليلها وإعطائنا النتائج.

لكي نتواصل مع الحاسوب لابد لنا من كتابة أوامر تمسى أوامر برمجية، وبعد ذلك يقوم الحاسوب بتحويل ما كتبناه إلى لغة الآلة وهي صفر وواحد كي يفهم ما طلبنا منه. في الماضي كانت الحواسيب كبيرة جدا وثقيلة وتقوم بأمر واحد بشكل صعب أما اليوم فتستطيع الحواسيب إنجاز الكثير من المهام. أي يمكنك أن تشاهد فلما وتلعب وتكتب في نفس الوقت وقد سهل الحاسوب الكثير من الأمور وحل مشاكل عديدة وسرع من تقدمنا في الحياة.

إلى هنا نكتفي وسأبسط قدر الإمكان لمن ليس لديه أية خلفية حول البرمجة وكلي أمل في تخرج العديد منكم من هذه الدورة بمعرفة عظيمة. كل ما يهمنا هو أن نتمكن من التحكم بالآلة والإلتحاق بركب التقدم الحاصل.

بالتوفيق لكم:pirates::blueheart:
 
التعديل الأخير:
متطلبات دورة ليسب Lisp
Start-up-300x300.jpg
إن الإستعداد لتعلم أي لغة يحتم علينا أن نوفر الأدوات اللازمة التي تعيننا على الدراسة ومواصلة التعلم والوسائل المتاحة التي توصلنا لهدفنا. قلنا سابقا أن التحدث للكمبيوتر لن يجدي نفعا ولن يستجيب لنا كونه آلة، ولمخاطبة الآلة لابد من بروتوكلات نتبعها كي نستطيع فعل ما نريد. إن لكل لغة بشرية كانت أم حاسوبية قواعد في طريقة كتابة اللغة مثلا اللغة العربية نكتب الجمل من اليمين إلى اليسار واللغة الإنجليزية من اليسار إلى اليمين، حتى أن بعض اللغات كالصينية واليابانية القديمة تكتب من فوق إلى تحت بشكل عمودي.

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

إن المصادر العربية لهذه اللغة 99% منعدمة إلا في ويكيبيديا بعض التعريفات لها. سنتعلم الأساسيات وهي كما في كل لغات البرمجة لابد من الأساسيات والقواعد التي تجعلنا لاحقا ملمين وتكسبنا معرفة في كيفية كتابة البرامج.

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

2012.jpg

للبدء نحن بحاجة لمحرر نصوص!! محرر النصوص هو المكان الذي نكتب به الجمل البرمجية والتي بدورها يقوم الحاسوب بأخذها وتحويلها لملف آخر قريب من لغة الآلة صفر وواحد كي يفهم ما كتبناه
ويعطينا النتائج.

notepad.jpg
ما الفائدة من محررات النصوص؟ محررات النصوص تشبة الدفاتر التي ندون فيها الدروس والواجبات في المدارس والجامعات، ولكنها بشكل إلكتروني. من الجميل أن ندرس البرمجة بشكل كتابي على الورق وهي طريقة فعالة قبل أن نكتبها على الحاسوب وهي ترسخ المعلومة جيدا لكي تراجعون ما تعلمتموه.

محررات النصوص برامج بسيطة في بداية تعلم أي لغة ولكن فهي لا تكفي للمشاريع الكبيرة والضخمة. هناك برامج كبيرة تمسى IDE وهي إختصار لبيئة التطوير المتكاملة، ماذا تعني؟ أي أنها برنامج بداخلها محرر نصوص ولكن ميزتها أنها ترتب لنا الجمل بشكل ملون جميل وتعرفنا على أي خطأ بلون معين كما أنها ترتب لنا ملفات المشروع تحت بعضه وتسهل علينا الإنتقال من ملف إلى أخر.
16088461968_c6a6c9e49a_c.jpg


وفي الدرس القادم سنتعرف على البيئات الخاصة التي سنعمل عليه لنظام ويندوز و أنظمة لينكس لمن لدية نظام لينكس ويود أن يتعلم معنا هذه اللغة. إلى هنا نكتفي. بالتوفيق جميعا.
 
التعديل الأخير:
  • لايك
التفاعلات: Ile
Geany IDE
geany-logo.jpg

برنامج جني، يعتبر بيئة برمجة متكاملة وسهلة إنها منصة رائعة تمكنك من العمل على كتابة أكوادك بكل حرية لمعظم لغات البرمجة المعروفة. سبب إختياري لهذا البرنامج لأنه يدعم لغة ليسب Lisp التي سنتعلمها معا هنا. سنرى البرنامج تحت وهو يتكون من محرر نصوص كما نشاهد مع بعض القوائم فوق والتي من خلالها تسهل عليها ترتيب الجمل البرمجية المكتوبة. البرنامج يعمل على كلا النظامين ويندوز ولينكس.
محتوى مخفي تسجيل الدخول أو تسجيل لمشاهدة الروابط

Screenshotfrom2017-11-0206-56-45.jpg
 
التعديل الأخير:
  • لايك
التفاعلات: Ile
PROGRAM STRUCTURE
هيكل البرنامج
Program-Structure.jpg
إن لغة ليسب Lisp هي لغة تعبيرية أي أن جملها تكتب على شكل تعبيرات يطلق عليها تعبيرات رمزية Symbolic Expressions أو بإختصار S-expressions. وكلمة Lisp هي إختصار لـ List Prossesing معالجة القوائم، أي أنها لغة قوائم وتتميز اللغة بالقوائم بهذه الأقواس ()()()()(). إن هذه الأقواس هي سر أناقة اللغة وكل الجمل التي سنكتبها ستكون داخل هذه الأقواس بشكل مرتب ومنظم، وقبل كل هذا علينا أن نتعرف خطوة بخطوة على كل صغيرة وكبيرة داخل هذه الأقواس لكي نكون متأسسين بشكل صحيح في معرفة كيفية البرمجة لاحقا. أرجو من الطلاب أن يدونوا ذلك في دفتر ملاحظات للمذاكرة.

والتعبيرات الرمزية تتكون من ثلاثة أشياء:

1 - الذرات Atoms: وهي كل رقم أو سلسلة من الأحرف المتجاورة مثل: hello - 12345 - ABC123 - KHALID

2 - القوائم Lists: هي الأقواس ()، فكل ما يكتب داخلها يعتبر قائمة. إن القوس الخالي () هذا يعتبر قائمة ويسمى
قائمة خالية Empty list. مثال على القوائم: (hello ahmed) (123456) (a b c d)

3 - السلاسل Strings: إن السلاسل هي اﻷحرف والكلمات التي تكون بين علامات مزدوجة " ".
مثال:
"welcome to lisp world"
"yes or no"
"hello "


إن برامج لغة الليسب تعمل على المفسر interpreter أو المترجم compiler. ما هو المفسر؟ إن المفسر interpreter هو برنامج يقوم بالتحقق من الكود البرمجي الذي سنكتبه في حلقة مكررة repeated loop ما معنى ذلك؟ معنى ذلك أن المفسر برنامج يقوم بقراءة الكود البرمجي الذي كتبناه ومن ثم يقوم بتقيمه بنفس اللحظة وبعد ذلك يقوم بطباعة القيم لنا على الشاشة. أما المترجم complier والذي سنعمل عليه وهو برنامج Geany فإنه يقوم بتحويل الجمل التي كتبناها إلى لغة الآلة ومن ثم ينشىء ملف تنفيذي أي له إمتداد وهذا الملف يكون قابلا للتنفيذ في أي وقت.


كل لغات البرمجة عند إنشاء ملف برمجي لابد لكل ملف من إمتداد يمثل اللغة التي كتب فيها، ما هو الإمتداد؟ مثلا إذا قمنا بإنشاء ملف برمجي جديد وأسميناه hello في هذه الحالة سيكون إمتداد الملف إذا كان خاصا للغة ليسب هكذا hello.lisp ومثال على إمتدادت للغات أخرى:
لغة السي hello.c
لغة جافا hello.java
لغة البايثون hello.py

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

التأسيس أساس كل شي، فحين أضع الطالب المتعلم على قاعدة صلبة أضمن أنني أديت المهمة بشكل مرضي وممتاز. إلى الأن لم ندخل في التفاصيل وسنتعمق شيئا فشيئا داخل اللغة، تعرفنا في هذا الدرس على معنى لغة ليسب ومما تتكون وإمتداد ملفات مشاريعها.
 
  • لايك
التفاعلات: Ile
منصة برنامج برنامج Geany تستطيع من خلالها كتابة لغة السي والسي++ والجافا والبايثون والكثير. قوة اللغة تعتمد على ذكائك وقدرتك على كتابة الأكواد البرمجية بمهارة أي إنها تتيح لك الحرية في كتابة ما تشاء. ما أريد من الطلاب هو الحماس والتفاؤل والصبر في تعلم اللغة، لغات البرمجة جاءت من خلال الهندسة أما لغة ليسب جاءت عبر معادلات رياضية(للتذكير).
 
التعديل الأخير:
  • لايك
التفاعلات: Ile
سنكمل اليوم دورة لغة البرمجة Lisp
إلى مستخدمي لينكس يجب تحميل clisp (مفسر ) لأن هذا البرنامج مهم عندما نقوم بتنفيذ البرنامج من Geany IDE سوف يساعدنا على تنفيذ الأوامر وإظهارها النتائج على الشاشة. إلى مستخدمي نظام Ubuntu و Mint linux سوف تجدون البرنامج موجود في تطبيق مدير البرامج المرافق للنظام
محتوى مخفي تسجيل الدخول أو تسجيل لمشاهدة الروابط

حملوا clisp بعدها ننتقل إلى برنامج Geany.

إلى مستخدمي ويندوز هناك برنامج يدعى Cygwin

clisp


هذه الأدوات تمكننا من برمجة لغة Lisp على شاشة الأوامر السوداء، ولكن سيكون عملنا بداخل بيئة البرمجة.
الدورة ليس لها مصادر عربية لذلك ستكون المصادر أجنبية من ثلاثة كتب، سأبسط الدروس وأجعلها سهلة والدورة مناسبة للجميع، أتمنى مراجعة ما سبق للإستعداد الجيد.
 
Lisp Work
بيئة متكاملة للغة ليسب على نظام ويندوز
محتوى مخفي تسجيل الدخول أو تسجيل لمشاهدة الروابط

لغة ليسب تندرج تحت مادة الذكاء الصناعي

 
التعليقات Comments

التعليقات comments مهمة جدا, وهي في كل لغات البرمجة وتستخدم لكتابة تعليق ما على كود معين. كأن يشرح المبرمج فقرة من الأكواد مثلا أو يوثق مستندا يصف فيه نوع البرنامج وأسم المبرمج وتاريخ الأنتاج وكذلك لحفظ الحقوق كاملة.

هذه هي التعليقات ولكل تعليق لا بد من رمز يأتي قبل كتابة التعليق. والتعليقات لا يعير لها المفسر أي إهتمام فمثلا إذا كتبنا 4 + 5 كتعليق لن يقوم المفسر بإظهار النتيجة 9 , لأن ذلك يعتبر مجرد تعليق لا أكثر. كيف نكتب التعليقات في لغة ليسب Lisp؟ نستخدم رمز الفاصلة المنقوطة ; لكتابة تعليق على سطر واحد. مثال:
Screenshotfrom2018-02-0205-37-14.jpg
 
التعديل الأخير:
  • لايك
التفاعلات: Ile
العمليات الحسابية
إن العمليات الحسابية هي وظائف تساعدنا على التعامل مع الأرقام، مثل الجمع (+) والطرح (-) والقسمة (/) والضرب (*). تعودنا في العمليات الحسابية في الرياضيات بأن تكون الرموز الحسابية في الوسط، مثل 5 + 5 و 10 * 4. ولكن في لغة ليسب الأمر مختلف حيث أن الرمز يأتي في المقدمة سابقا الأعداد. ولتوضيح الأمر نأخذ المثال التالي:
في المثال أدناه نلاحظ الطريقة الإعتيادية التي نألفها في الرياضيات وباقي لغات البرمجة، مقارنة مع الطريقة التي تتخذها لغة ليسب.
Screenshotfrom2018-02-0206-12-56.jpg
 
  • لايك
التفاعلات: Ile
Evaluation
التقييم
في الدرس السابق قمنا بتعلم كيفية كتابة تعبير(كلمة تعبير ستتكرر معنا أي أننا نعني بها الأسطر البرمجية وقلنا من الدروس الأولى من الدورة أن السطور البرمجية في لغة ليسب تكتب على شكل تعبيرات).

Screenshotfrom2018-02-0210-00-42.jpg

في المثال فوق، بعض التعبيرات الحسابية البرمجية، نلاحظ أن أول شي قمنا به هو كتابة الأقواس. الأقواس هي ما تميز لغة ليسب ومن دونها لا نستطيع المضي. هل تذكرون كلمة أنيقة؟ هذا ما أعني به، وهي السطور المرتبة المقسمة بشكل متناسق. في درسنا هذا سنتعلم كيفية تقييم التعبيرات ونعني بالتقييم هو الأولوية في التنفيذ.

1 - الرمز + تعتبر وظيفة، مهمتها جمع الأرقام. في المثال رقم واحد عندما يكون الرمز + داخل الأقواس يسمى function call أي إستدعاء الوظيفة +. أي قمنا بإستدعاء الوظيفة + وطلبنا منه أن يقوم بمهمته وهي جمع الثلاث أرقام. هنا عملية التقييم تبدا من اليسار إلى اليمين، أي سيقيم الأعداد ومن ثم سيمررها إلى الرمز + لكي يخرج لنا النتيجة 12.

2 - أترك لكم إجابته
;)

3 - في المثال رقم ثلاثة سيمر التقييم بثلاثة مراحل وهي:
- القائمة (2 2 *) ستيم تقيمها أولا وستمرر الأرقام إلى الوظيفة * لتخرج لنا النتيجة 4.
- بعد ذلك القائمة (1 5 -) هنا ستمرر الأرقام للوظيفة - والتي بدورها ستعطينا النتيجة 4 أيضا.
- بعد ذلك سننتقل للقائمة التي إحتوت القائمتين وستمرر النتائج 4 4 إلى الوظيفة + وستكون النتيجة النهائية هي 8.

Screenshotfrom2018-02-0210-32-46.jpg

الخلاصة: كلمات إحتوت القائمة على قوائم بداخلها ستكون الأولوية للتقيم للقوائم الداخلية.
 
التعديل الأخير:
  • لايك
التفاعلات: Ile
Function
الوظيفة(الدالة)
في لغات البرمجة يحدث إرباك للمبرمجين في التفريق بين الدالة والوظيفة، إن الدالة هي الوظيفة والوظيفة هي الدالة لافرق بينها. فالدالة أمر برمجي برمج سابقا يساعدنا على تنفيذ أمر معين. أول دالة أو وظيفة سنتعرف عليها في درسنا هي الدالة print.

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

لننتقل إلى برنامج Geany بشكل عملي، ونرى كيف تتم عملية الطباعة. من المهم أولا أن نفتح قوسين وكل العمل يجري بداخلها. هناك نقطة مهمة وهي أن الدوال تأتي في مقدمة قبل الأرقام والجمل: (print xxxxxxxxx).

من شريط المهام نختار file -> new وبعد ذلك نخزن الملف بإمتدا work.lisp أو أي إسم تريدون. ولتنفيذ البرنامج نضغط على الإيقونة الموضحة في الصورة.

Screenshotfrom2018-02-0302-11-25.jpg

في المثال نلاحظ رقم 1 قمت بطباعة عملية حسابية بإستخدام الدالة print
وفي رقم 3 أيضا. أما رقم 5 فقمت بطباعة جملة نصية(النصوص يجب أن تكون بداخل علامات التنصيص)
مثل هذه السطور تكون معقدة في لغات البرمجة الأخرى، من برمج سابقا يعرف ماذا أعني.

Screenshotfrom2018-02-0302-08-36.jpg
الدالة format t
إن الدالة format t (إختصار لـ format text) وظيفتها طباعة النصوص بدون علامات تنصيص. مثال:

Screenshotfrom2018-02-0301-54-46.jpg

نصيحة: حاولوا أن تجربوا جمل أخرى ومسائل رياضية مختلفة لأن التعلم يتطلب كتابة الكود بشكل مستمر
لكي تثبت المعلومة.
 
التعديل الأخير:
المعامل quote
المعامل quote هو أحد المعاملات الخاصة التي لا تتبع قواعد التقييم في ليسب. هذا المعامل خاص يتبع قاعدة خاصة به حيث يقيم نفسه والقاعدة هي: لاتفعل شيئا do nothing. إذا فالمعامل quote يقوم بإرجاع القوائم مثل ما هي من دون تغير.

مثال:

في المثال قمنا بطباعة قائمتين 1 جمع رقمين و 2 طرح رقمين. وعند إضافة المعامل quote قام بإرجاع القوائم على شاشة الأوامر مثل ما هي من دون إخراج النتائج.

Screenshotfrom2018-02-0305-20-01.jpg

للمعامل quote إختصار متمثل في الإقتباس الأحادي(الفاصلة العليا ')
مثال:

Screenshotfrom2018-02-0402-49-48.jpg
 
التعديل الأخير:
مقارنة ليسب مع جافا
هنا مقارنة في طباعة جملة واحدة بين جافا وليسب ونلاحظ كم الفرق كبير.
Screenshotfrom2018-02-0305-38-49.jpg

 
التعديل الأخير:
البيانات Data
في العديد من لغات البرمجة هناك ما يسمى البيانات والبيانات هي عناصر تستخدم في تمثيل المعلومات. إن الأرقام الصحيحة والكسرية والنصوص والأحرف لكل منها بيان خاص تعرف من خلاله. أول بيان سنتعرف عليه هو integer وهو نوع من البيانات يستخدم للتعريف بالأعداد الصحيحة(ونعني بالأعداد الصحيحة التي تكتب من غير كسور أو فواصل - الموجبة )، أي تكتب على شكل سلاسل من الأرقام مثل:
1234 - 265- 790 - 12 - 443 - 1000

أيضا هناك نوع بيان آخر في ليسب مشترك مع بقية لغات البرمجة ألا وهو String. كلمة string تعني سلاسل وهي تختص في بيان النصوص، أي تكتب على شكل نصوص بداخل الإقتباسات المزدوجة مثل:

" welcome " - " milk and honey" - "what is your name"

ماذا سيحدث لو طبعنا قائمة فارغة ()؟ ماذا ستكون النتيجة؟ إلى المثال التالي:
نلاحظ في المسألة الأولى أنه أعطانا النتيجة Nil أو nil، معنى هذا أن القائمة فارغة وكلمة nil تشير إلى القيمة صفر، كما في لغات البرمجة الأخرى. nil أو صفر يدلان على عدم وجود قيمة. أما باقي الأمثلة فهي طباعة أرقام من دون إجراء عملية حسابية وأيضا قمت بإضافة تعليق وإذا نظرنا إلى مخرجات البرنامج نشاهد أن المترجم قام بإهمال التعليق ولم يطبعه، وفي أخر السطر جملة برمجية لطباعة نص بين علامات إقتباس.

Screenshotfrom2018-02-0403-23-05.jpg




 
التعديل الأخير:
  • لايك
التفاعلات: Ile

أداب الحوار

المرجو التحلي بأداب الحوار وعدم الإنجرار خلف المشاحنات، بحال مضايقة إستخدم زر الإبلاغ وسنتخذ الإجراء المناسب، يمكنك الإطلاع على [ قوانين وسياسة الموقع ] و [ ماهو سايكوجين ]

الأعضاء الذين قرؤوا هذا الموضوع [ 5 ]

أعلى