الذكاء الصناعي

الموضوع في '|||▮ The Matrix |▮||' بواسطة lost|pages, بتاريخ ‏12 فبراير 2016.

?

ما مدى إهتمامك بلغة ليسب وتأثيرها في عالمنا مستقبلا؟ وهل تؤيد إستمرارية الدورة؟

  1. مهتم ولكن ليست من تخصصي

    3 صوت
    60.0%
  2. لا أعلم عنها شيئا

    0 صوت
    0.0%
  3. قديمة وصعبة

    0 صوت
    0.0%
  4. سيكون لها إقبال كبير وفريق تطوير عربي حر

    0 صوت
    0.0%
  5. غير مرحب بها في سوق العمل

    0 صوت
    0.0%
  6. أؤيد إستمرارية الدورة

    4 صوت
    80.0%
التصويت المتعدد مسموح به
  1. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    Local Variables
    المتغيرات المحلية


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

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

    والان سنتعرف على دالة let لإنشاء المتغيرات المحلية:

    Screenshotfrom2016-11-1503-19-32.jpg

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

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

    حسنا!
    1 - رقم واحد عرفنا متغير إسمه number ويحمل القيمة 100, هذا المتغير عام بحيث يمكن إستداعاءه في أي مكان في البرنامج لإنه بجانب الوظيفة defvar وكلاهما في محتوى واحد معا يلفهما قوسين.

    2 - أما هنا فالأمر يختلف لنلقي نظرة فاحصة, لقد عرفنا متغير إسمه number4 ويحمل القيمة 400 وقمنا بطباعة
    هذه القيمة, ولكن ما هذه الأقواس الكثيرة؟ هذا المتغير number4 هو متغير محلي خاص فقط بالوظيفة let وليس عام, يكون المتغير من ضمن الوظيفيه أي في داخل أقواس خاصة به..إنتظر إنتظر !! لنحلل المسألة جيدا:

    أولا () قوسين للوظيفة let
    ومن ثم () للمتغير number4 + القيمة 400
    و بعد ذلك قوسين () يحتويان على محتوى المتغير number4 لماذا؟ لأن لو كان المتغير (400 number4) هكذا بجانب الوظيفة let فلن يكون محليا لأن المحتوى كله يعتبر عنصر لحاله فلا بد أن نضعه أيضا في داخل قوسين آخرين لكي يكون خاصا للوظيفة let

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

    الخلاصة في الرسم التالي:

    ( (الطباعه) (( المتغير + القيمة )) الوظيفة )


    7 - عرفنا متغيريرن x و y وأسندنا القيمة 1 للمتغير x و القيمة 2 للمتغير y.
    نلاحظ أن محتواهما بداخل محتوى بداخل محتوى الدالة.
    بعد ذلك قمنا بطباعة ناتج جمع المتغيرين ونرى دالة الطباعة print داخل محتواها وتحتوي على محتوى جمع المتغيرين.

    ( ((جمع المتغيرين +) الطباعه) ((المتغير الثاني + القيمة)(المتغير الأول + القيمة)) الوظيفة )

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


    sasa.jpg
     
    #51
    آخر تعديل: ‏15 نوفمبر 2016
    أعجب بهذه المشاركة Rami
  2. الحقيقة

    الحقيقة عضو مشارك

    المشاركات:
    377
    الإعجابات المتلقاة:
    613
    لأول مرة في حياتي اشعر انني فهمت معنى كلمة لغة برمجة وهذا من خلال شرحك البسيط والراقي
    شكرا لك اخي حقا موضوع ابداع
     
    #52
    Rami و lost|pages معجبون بهذا.
  3. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    أسعدني تواجدكي يا سيدة الأبداع, في حضرة الشمس تختفي النجوم, وعودة حميدة لألفا التي بدأت تستعيد أعضاءها المخضرمين من جديد.
     
    #53
    أعجب بهذه المشاركة Rami
  4. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    Build Functions
    بناء الدالة أو الوظيفة.



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

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

    مثال:
    المهندس يمثل (دالة) --> (الوظيفة) مصمم معماري.

    لتعريف الدالة نستخدم الكلمة defun , هي إختصار لكلمة defining functions أي تحديد الوظيفة أو تعريف الوظيفة, والكلمة defun تحتاج إلى ثلاثة أشياء وهي:
    1- إسم الوظيفة.
    2 - البارامترات parameters أي المحتويات أو العناصر الخاصة بهذه الوظيفة.
    3 - جسم الوظيفة
    12.jpg


    لاتقلقوا سأشرح بالتفصيل الممل حتى تكون الصورة واضحة ولن أتحرك إلا بأمثلة كثيرة جدا عن الوظائف وسوف تستمتعون بكاتبة الكثير منها لاحقا. نرى في الصورة التي في الأعلى القاعدة العامة لكتابة أو تعريف دالة, الكلمة defun تأتي في المقدمة ولو تلاحظون أن كل شي داخل الأقواس, بعدها كلمة name وهي أسم الوظيفة والتي سنتعلم إختيار أسماء رائعة لوظائفنا, بعد ذلك نرى محتوى parameter-list أي العناصر التي ستكون مرفقة مع الدالة, أما تحت optional documentation string بين علامات تنصيص تعني أن هنا سيكون المهم الخاصة بالوظيفة, وأخيرا كلمة body أي جسم الوظيفة ويحتوي على أمر بطباعة جملة أو ناتج العناصر على حسب مهمة الوظيفة.

    تذكر: التطبيق العملي بكثرة هو سر فهم البرمجة وعدم النسيان. لاحقا ستكون دورسنا كلها عملية بحتة ولكن ليس الأن نحن الأن في الأساسيات.
    إلى هنا نتوقف وسأكمل لاحقا بأمثلة جميلة.
     
    #54
    آخر تعديل: ‏15 نوفمبر 2016
    أعجب بهذه المشاركة Rami
  5. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    تعلمنا في الدرس السابق عن كيفية تعريف دالة جديدة والأن سنقوم بكتابة أول دالة لنا في هذا الكورس.

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

    - بعد أن عرفنا دالة جديدة قمنا بإعطائها أربعة بارامترات أي عناصر داخل محتواها وهم n1 n2 n3 n4.
    - في السطر الثاني هنا تأتي الوظيفة الخاصة بالدالة الجديدة وهي جمع أربعة عناصر ومن ثم تقسيم ناتجها على 4 كما نشاهد أولا محتوى مجموع العناصر الأربعة داخل محتوى القسمة, سينفذ الجمع أولا ومن ثم القسمة.

    - في السطر الثالت قلنا سابقا إن للدالة جسم وهذا هو جسم الدالة وقد قمنا هنا بطباعة الدالة الجديدة بعد أن أعطيناها أربعة أرقام, وعند ترجمة الكود سيقوم المترجم بأخذ الأرقام الأربعة ووضعها في الدالة رقم 1 وبعد ذلك يدخل إلى داخل الدالة الجديدة ويعوض العناصر بالقيم ومن ثم ستقوم دالة الطباعة بطباعة النتيجة لنا.




    ww.jpg
     
    #55
    آخر تعديل: ‏24 سبتمبر 2016
  6. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    تمرين جميل آخر
    في هذا التمرين قمنا بإنشاء دالة جديدة إسمها sumnumber, تحتوي على ثلاثة بارامترات أي ثلاثة عناصر أو محتويات وهم a b c, في داخل الدالة يوجد محتوى يحتوي على ثلاثة عناصر مضافة إليها الرمز (+) زائد. هذا المحتوى يعتبر وظيفة الدالة وهي جمع ثلاثة عناصر. بعد ذلك نذهب لجسم الدالة والذي يحتوي على دالة الطباعة, حيث الدالة write ستقوم بطباعة الدالة الجديدة sumnumber ولكن بعد أن يتم تعويض a b c داخل الدالة بـ 100 50 45.
    لنرى النتيجة على شاشة الأوامر وهي 195, وهي نتيجة جمع الأرقام الثلاثة بعد أن قامت الدالة الجديدة بوظيفتها. هذه دالة سهلة جدا وبسيطة وإن شاء الله نحو إحتراف هذه اللغة.


    w1w1.jpg

    لدينا هنا مثال أخر وقمنا هذه المرة بتعريف دالة جديدة إسمها num, هذه الدالة تحتوي على ثلاثة عناصر وهما a b c وأيضا تحتوي على الوظيفة الخاصة التي ستقوم بها وهي ضرب الثلاث عناصر ببعضها.

    وعند طباعة الدالة الجديدة نقوم بإعطاءها ثلاثة قيم, إن الدالة print ستقوم بالنظر في الدالة الجديدة حيث سيتم تعويض هذه القيم داخل الدالة الجديدة فوق, وبعد إنهاء العملية ستقوم الدالة print بإستخراج الناتج لنا من الدالة num وهي ناتج ضرب القيم والذي يساوي 6000
    cxc.jpg
     
    #56
    آخر تعديل: ‏15 نوفمبر 2016
  7. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    تمارين شاملة للصفحة الثالثة من الموضوع
    qaw.jpg
     
    #57
    أعجب بهذه المشاركة Rami
  8. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    تنويه للأعضاء : هذا الكورس مخصص للغة الذكاء الصناعي نحن في الأساسيات ولن نكتب برامج ذكية الأن لاننا في مهد التعلم فقط أريد تأسيسكم ووضعكم على الطريق الصحيح أولا, وعند الأحتراف إن شاء الله سننتقل لكتاب آخر إسمه
    The.Elements.Of.Artificial.Intelligence.An.Introduction.Using.Lisp
    مقدمة في إستخدام عناصر الذكاء الصناعي بإستخدام لغة ليسب Lisp

    الهدف والرؤية: إزالة الغموض الذي يلف عالم البرمجة وإبراز صورة واحدة عن ماهية الذكاء الصناعي وإرساء قاعدة ومرجع لهذا العلم هنا. موفقين جميعا :innocent:
     
    #58
    آخر تعديل: ‏25 سبتمبر 2016
    أعجب بهذه المشاركة Rami
  9. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    دالة الطباعة format t

    لقد تعلمنا عدة دوال للطباعة وهي print و write و write-line, والدالة الجديدة التي سنتعرف عليها خاصة بطباعة النصوص هي format t. دالة جميلة جدا وبسيطة نبدأ أولا بتفح قوسين ومن ثم نكتب الكلمة format t الـ t معناها text أي نص وبعد ذلك الجملة المراد طباعتها. لنأخذ نظرة على المثال التالي:


    12q.jpg
     
    #59
    أعجب بهذه المشاركة Rami
  10. lost|pages

    lost|pages مترجم محترف

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

    1 - عرفنا هنا دالة جديدة إسمها sum-all وأسندنا لها أربعة عناصر وهم a b c d وبعد ذلك قمنا بإضافة محتوى أخر تمثل وظيفة الدالة وهي محتوى يحتوي على أربعة عناصر (a b c d +) هذه ستكون وظيفة الدالة جمع العناصر.

    2 - هنا المهم, لقد قمنا بتعريف متغير جديد إسمه sum1 لاحظوا متغير وليس دالة, هذا المتغير سيحتوي على مجموع القيم الجديدة التي إضيفت للدالة الجديدة sum-all وهم 100 200 300 400.

    3 - هنا سنقوم بطباعة المتغير sum1 والنتيجة ستكون مجموع القيم التي ذكرناها في رقم 2.
    4- سطر جديد محتوى نصي فارغ, لماذا؟ لأن write لا تنزل سطرا لتحت.
    5- هنا نقوم بإستدعاء الدالة وبذلك بطباعتها وقبل الطباعة أسندنا لها قيم جديدة وهي 10 20 30 40, وقبل أن تقوم الدالة write بالطباعة ستقوم الدالة الجديدة sum-all بتعويض القيم داخل جسمها وبعد ذلك ستقوم الدالة write من جديد بطباعة القيم.

    كما نشاهد في صندوق شاشة الأوامر:
    نتيجة المتغير = 1000
    نتيجة الدالة الجديدة = 100

    wwwq.jpg
     
    #60
    أعجب بهذه المشاركة Rami
  11. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    Making Decision
    صنع القرار


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

    saas.jpg

    أول أداة شرطية سنتعرف عليها اليوم هي IF Statement وهي أداة بسيطة تأتي في مقدمة جملة الأختبار للتحقق منه ومن بعض الدوال. إن التركيب النحوي للدالة IF:


    (if (test-clause) (<action 1 ) (action 2 ))

    تلاحظون أن الدالة if تأتي في مقدمة بند الأختبار وهو (test-clause) فإن كان الشرط صحيحا t أي True, سيتم تنفيذ أول سطر وهو (action1) أما إن كان خطأ أي nil سيتنقل البرنامج إلى السطر الثاني وهو (action2). يتم تحديد الصح من الخطأ في الشرط بـ t أي صحيح أو nil أي خطأ.

    مثال
    Screenshotfrom2016-09-2905-11-07.jpg
    1 -في هذا المثال قمنا بتعريف متغير إسمه number يحمل القيمة 100.

    2- هنا قمنا بالتحقق من الشرط بإستخدام الدالة if, نلاحظ أن if تأتي في مقدمة الشرط والمحتوى الذي يليها هو الشرط بحيث نقوم هنا بالتحقق من المتغير number إن كان أكبر من 50 وبعد ذلك تليها جملة الطباعة format t.
    سترون أن جملة الطباعة اﻷولى في داخل جسم دالة الشرط if. إن كان الشرط صحيحا سيقوم البرنامج بتنفيذ الجملة أما إن كانت خطأ سيخرج من البرنامج وستنفذ الجملة الأخيرة. والشرط كما نرى صحيحا حيث إن المتغير number أكبر من 50.



    3 - الجملة الأخيرة جملة الطباعة ليس لها علاقة بالشرط فهيه خارج جسم الشرط, سواء إن كان الشرط صحيحا أم لا سيتم تنفيذ الجملة الأخيرة. ولكن هناك رموز غريبة؟!! ما هي؟

    إن الرمز ~% ( shift + ذ - shift 5) هذا الرمز يترك مسافة في بداية الجملة وإن إستخدمته كثيرا سيتم النزول عدة أسطر لتحت كما نرى في شاشة الأوامر.

    سيتم طباعة الجملة الأخيرة مرفوقة بـقيمة المتغير number , وأيضا نرى رمزا آخر وهو ~d وهذا الرمز يسمى الموجه d ويقوم بإخراج الأرقام الصحيحة بشكل عشري decimal وإختصارها d يعني أنه سيتم تعويض قيمة المتغير بدلا منه, بإختصار هي خاصة للأرقام الصحيحة وستكون الجملة كالتالي: value of number is 100

    ملاحظة: لنتمرن كثيرا على الرموز إكتبوها كثيرا جربوها وستحفظونها, لا تخافوا منها فلغات البرمجة اﻷخرى أيضا لها رموز مشابة لها. تسمى هذه الرموز بالـ directives أي الموجهات وسنتعلمها بالتفصيل الممل لاحقا في درس خاص لدحر الغموض عنها.
     
    #61
    آخر تعديل: ‏15 نوفمبر 2016
  12. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    مرحبا, اليوم لدينا تمرين بسيط مكون من عدة مسائل وأردت شرح الرموز الموجهات,
    الموجهات هي إختصارات رمزية تؤدي مهام معينة.

    1- قمنا تعريف متغير عام وليس محلي, يحمل قيمة وبعد ذلك قمنا بطباعة جملة نصية مصحوبة بالمتغير, في الدالة format t يحتوي النص على الموجه ~d والذي قلنا سابقا أنه يرمز للعدد الصحيح بشكل عشري decimal. سيقوم المترجم بتعويض الرمز بقيمة المتغير x وسنرى النتيجة في شاشة الأوامر.

    2- أيضا نفس الحالة السابقة ولدينا هنا رمزين أولها ~% قلنا إن هذا الرمز ينزل بجملة الطباعة سطرا واحدا لتحت, ولدينا اليوم رمز جديد آخر وهو ~f وهذا الموجه خاص بالأرقام التي تحتوي على فواصل عشرية و هذا الحرف إختصار للكلمة float أي مختص بالأرقام التي تحتوي على كسور, وكلمة float في باقي لغات البرمجة هي نفسها. عند طباعة الجملة سيقوم المترجم بتعويض قيمة y بدلا من الرمز ~f. وسنرى النتيجة في شاشة الأوامر.

    3 - التمرين الثالث مشابة لرقم واحد. لاحظوا أن الرمز ~% كيف رتب لنا الجمل تحت بعضها البعض بشكل أنيق.


    Screenshotfrom2016-09-2916-59-51.jpg
     
    #62
  13. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    توضيح: هذا ليس تمرين ولكن مقارنة بين رسالة الترحيب في لغة الجافا Java و لغة ليسب Lisp.
    الكود اﻷول للجافا وأخر كود تحت هو للغة ليسب. نرى الفرق واضح وشاسع بين التعقيد والبساطة.
    Screenshotfrom2016-09-2917-27-42.jpg
     
    #63
    أعجب بهذه المشاركة Rami
  14. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    تمرين آخر حول الداله if

    1- قمنا بتعريف متغير إسمه value يحمل القيمة 100, بعد ذلك إستخدمنا أداة الشرط if لأختبار قيمة المتغير value إذا كانت أكبر من أو تساوي 50, فإن كان الشرط صحيحا ستطبع الجملة الاولى True وإن كان الشرط غير صحيح سيقوم المترجم بطباعة النتيجة اﻷخرى False.

    4- أيضا هنا إختبرنا المتغير إذا كانت قيمته تساوي 20 سيقوم بطباعة الجملة الأولى وإن كان خطأ سيقوم بطباعة الجملة الثانية. لقد إستخدمنا الموجه ~% لكي ننزل سطرا واحدا للأسفل.

    6 - هنا جملة طباعة عادية ليس لها علاقة بالشرطين فوق لأنها ليست بداخل المحتوى if. وقد إستخدمنا رمزين موجهين وهما ~% و ~d. الرمز الأول للنزول سطر للأسفل والأخر لتعويض قيمة value مكان الرمز ~d.


    asa.jpg
     
    #64
    آخر تعديل: ‏15 نوفمبر 2016
    أعجب بهذه المشاركة Rami
  15. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    الدالة الشرطية cond
    تستخدم هذه الدالة الشرطية لإختبار عدة شروط معا, كما في التداخل في الدالة if في لغات البرمجة الأخرى, حيث هناك تتداخل if فيما بينها, أما في لغة ليسب Lisp فلا داعي للتداخل فالدالة cond تحل هذه الإشكالية وسنتعرف عليها وعلى طريقة عملها وأيضا سنأخذ بعض اﻷمثلة والتمارين حولها.

    القاعدة العامة للدالة الشرطية cond:

    Screenshotfrom2016-10-0100-38-16.jpg

    لاحظوا معي جيدا الصورة التالية, تحتوي الدالة على عدة بنود وكل بند يحتوي على إختبار شرطي test + نتيجة التنفيذ action.
    إذا كان الشرط الأول test1 صحيحا سيتم تنفيذ أول action1 وبعد ذلك سيقوم البرنامج بتخطي البنود الأخرى ولن ينفذها.
    أما إن كان الشرط الأول غير صحيح سينتقل البرنامج إلى الشرط الثاني وسينفذه إن كان صحيحا وإن كان غير صحيح سينتقل للشرط الثالث وهكذا.أما في حالة كانت جميع الشروط غير صحيحة في حينها سيقوم البرنامج بإعادة القيمة nil لنا على شاشة الأوامر.


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

    Screenshotfrom2016-10-0101-03-37.jpg

    ملاحظة : لقد تعلمت بعض لغات البرمجة السابقة وقد بهرت اليوم بالدالة cond كونها أفضل من كتابة الكثير من أدوات الشرط في تلك اللغات, حقا كان العمل مليئا بالتعقيد والغريب في الأمر أن المبرمجين ما زالوا يفضلونها. تعتيم برمجي على أناقة لغة ليسب Lisp:kissingheart:
     
    #65
    آخر تعديل: ‏1 أكتوبر 2016
    أعجب بهذه المشاركة Rami
  16. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    الدالة الشرطية when
    سنتعرف اليوم على الأداة الشرطية when, تقوم هذه الأداة بالتحقق من الاختبار فإن كان غير صحيح سترجع لنا القيمة nil, وإن كان الأختبار صحيحا أي True أي t, سيتم تنفيذ الأجراء.

    القاعدة العامة للدالة الشرطية when:
    نلاحظ معا شكل القاعدة, نفتح أولا قوسين ونكتب when بعد ذلك نفتح قوسين لإختبار الشرط وآخر للـ action أي الإجراء الذي سينفذ من قبل البرنامج إن كان الشرط صحيحا.
    Screenshotfrom2016-10-0206-15-41.jpg
    مثال عملي:
    شرح المثال كالتالي, قمنا بتعريف متغير إسمه b وقمنا بإسناد قيمة له وهي 100. بعد ذلك إستخدمنا الدالة الشرطية when للتحقق من الاختبار وهو إن كان b أكبر من 20؟ فإن كان اﻷختبار صحيحا t, سيقوم البرنامج بطباعة الجملة التي بعد الأختبار والتي تقول أن b أكبر من 20. وفي النهاية في السطر الثالث سيقوم البرنامج بطباعة الجملة " قيمة b هي" وقد تلاحظون أننا إستخدمنا رموز موجهة وقد تعلمنا سابقا دورها في البرنامج. رقم 3 ليس له علاقة بالشرط لأن الجملة خارج الشرط وليس في محتوى الشرط هي فقط جملة عادية.

    ملاحظة: أرجو التمرن كثيرا جدا

    Screenshotfrom2016-10-0206-21-49.jpg
     
    #66
    أعجب بهذه المشاركة Rami
  17. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    تمرين أخر على دالة الشرط when

    في هذا التمرين قمنا بتعريف متغيرين b و c وأسندنا لهما قيمتين 10 و 20.
    في دالة الشرط when نشاهد الاختبار هنا وهو عندما يكون حاصل ضرب b في c يساوي 200 صحيحة أي True !! عندنا محتويين بداخل بعضهما أولها حاصل ضرب b في c وبعد ذلك المحتوى = 200, سيقوم البرنامج بإختبار الشرط وهو ضرب المتغيرين وبعد ذلك المقارنة إذا كانا يساويان الـ 200.

    عندها سيتم تنفيذ الإجراء وهي جملة الطباعة "b *c = 200", كما نرى النتيجة على شاشة الأوامر.
    Screenshotfrom2016-10-0209-14-43.jpg
     
    #67
    آخر تعديل: ‏2 أكتوبر 2016
    أعجب بهذه المشاركة Rami
  18. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    تمارين على دوال الشرط when if cond
    هذه المرة بلا شرح أترك لكم فهم التمرين

    Screenshotfrom2016-10-0302-42-06.jpg
     
    #68
    أعجب بهذه المشاركة Rami
  19. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    الدالة الشرطية case
    تقوم هذه الدالة بإختبار عدة شروط وهي مشابهة للدالة الشرطية cond, التي تعلمناها سابقا ولكن ما يميز هذه الدالة أنها تقييم الأختبارات بمفاتيح keys وتشبه المفاتيح تلك التي في الدالة switch في لغات البرمجة الأخرى. أي نستخدم قيمة المتغير كمفاتيح لإختبار النتيجة الصحيحة, من يعرف البرمجة سابقا سيعرف أنها مشابهة لـ switch.

    تذكروا اللغة من عام : :sweatsmile:1958

    القاعدة العامة لصيغة case:

    Screenshotfrom2016-10-0303-12-22.jpg

    مثال عملي:

    في المثال قمنا بتعريف متغير إسمه Day يحمل القيمة 5, بعد ذلك قمنا بإختبار المتغير بإستخدام الدالة الشرطية case وتعني حالة. أي حالة اليوم الأول حالة اليوم الثاني وهكذا!! لقد إستخدمنا قيمة المتغير كمفاتيح وستقوم الدالة بإختبار المتغير والبحث عن المفتاح الصحيح للتحقق من صحته وبعد ذلك ستقوم الدالة بطباعة لنا الجملة الخاصة بالمفتاح الصحيح. كما نشاهد على شاشة الأوامر كانت قمية المتغير هي 5 وبالتالي رسى الأختبار على يوم الأربعاء حيث طبعت لنا الكلمة wednesday. أنظروا إلى شكل الكود المرتب والسهل, من تعلم اللغات الأخرى يعرف ماذا أقصد.
    121.jpg
     
    #69
    آخر تعديل: ‏15 نوفمبر 2016
    Rami و ShiMauRo معجبون بهذا.
  20. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    تمرين أخر على الدالة case:
    عرفنا متغير إسمه animals أي حيوانات وهذا المتغير يحمل القيمة 3. في الدالة case لدينا ثلاثة حيوانات و ستقوم الدالة case بإختبار القيمة 3 كمفتاح للحصول على إسم الحيوان المناسب للرقم 3 أي النتيجة الصحيحة وطبعها على شاشة الأوامر. كما نرى فإن النتيجة هي sheeps


    Screenshotfrom2016-10-0320-48-41.jpg
     
    #70
    آخر تعديل: ‏15 نوفمبر 2016
    أعجب بهذه المشاركة Rami
  21. انسان حر

    انسان حر عضو جديد

    المشاركات:
    11
    الإعجابات المتلقاة:
    9
    الجنس:
    ذكر
    من خلال قراءة المقدمة عن اللغة هل استطيع صيغتاها في اي نوع من انواع المشاريع بسيط ام معقد وهل تحتاج الي مترجمات لتنفيذ اوامرها ام حالها مثل الاسمبلي و(السي والسي بلس بلس) في معظم انظمة التشغيل
     
    #71
    آخر تعديل بواسطة المشرف: ‏15 أكتوبر 2016
    أعجب بهذه المشاركة lost|pages
  22. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    انسان حر...نعم تستطيع أن تعمل مشاريع بها وهي أسهل من لغة السي ++ وليست معقدة مثل الأسمبلي. أما من ناحية المترجمات فقد أسهبت في مواضيع عدة إرجع لها وسترى وصلات خاصة بالمترجمات التي تخص اللغة. أنا أستخدم برنامج Geany, اللغة بحاجة لدراسة متأنية وفكر صافي وإرادة قوية وصبر وفهم. لم أدخل اﻷن في المشاريع ولا حتى في تصميم الواجهات بحكم اللغة غريبة وقديمة وقوية لذلك سأرى ما ستؤل له الأمور لاحقا وأين سنصل بها. مازلنا في الأساسيات الأن وأنا بدوري أدرسها ذاتيا هنا وأضع الدورس لها.
     
    #72
    أعجب بهذه المشاركة انسان حر
  23. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    أغلب المبرمجين يتعلمون اللغات التي يتطلبها سوق العمل اليوم, أعتقد أن من يريدون إخفاء هذه اللغة ومحاربتها قد إكتشفوا سر قوتها وسهولتها ولإتاحة الفرصة للغات الأخرى بالظهور للعامة, والغريب حقا أن مازال الكثير مصرين على تلك اللغات رغم تعقيداتها وقوانين الشركات التي صممتها. إن الحرية وإختيار الطريق المجهول لهو حقا مخيف في بداية الأمر وكونك تعمل على شي نادر وجديد ضد القطيع. أتمنى من المبرمجين إعادة النظر لهذه اللغة وتعلمها وكتابة أكواد وبناء دوال جديدة والسماح لها بالظهور بقوة هذه المرة لتكتسح سوق العمل منافسة باقي اللغات وأيضا الجهات المعنية الأهتمام بها ووضعها في قائمة المصادر البرمجية المطلوبة.
     
    #73
  24. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    الدالة setf

    مرحبا من جديد, سنتعرف اليوم على دالة جديدة وهي setf, هذه الدالة تشبه الدالة التي تعلمناها سابقا وهي setq. تقوم الدالة الجديدة بإسناد قيمة للمتغير. وبعد ذلك نقوم بطباعة المتغير.

    مثال :

    Screenshotfrom2016-11-1521-17-06.jpg
     
    #74
  25. lost|pages

    lost|pages مترجم محترف

    المشاركات:
    1,189
    الإعجابات المتلقاة:
    1,614
    الدالة Reverse

    سنتعرف على دالة جديدة تدعى Reverse والتي تعني التضاد أو التعاكس, تقوم هذه الدالة بطباعة القوائم بشكل معكوس, وسنرى ذلك في المثال التالي:

    في المثال تحت, نشاهد جملة الطباعة في رقم واحد وهي جملة عادية تطبع لنا قائمة كاملة من دون إرجاع النتيجة بسبب إستخدامنا للإقتباس (') والذي تعرفنا عليه سابقا بإنه يرجع لنا القوائم من دون نتيجة.

    ما الجديد هنا؟ إنها الدالة Reverse, في الرقم 3 قمنا بإنشاء متغير إسمه value وهذه المرة نرى أن المتغير يحتوي الدالة Reverse وقائمة أخرى. تقوم هذه الدالة Reverse بعكس القائمة في محتوى المتغير value.

    عند القيام بطباعة قيمة المتغير value في الرقم 4, ستقوم الدالة الجديدة بعكس القائمة الخاصة بالمتغير value وبعد ذلك سنراها أثناء الطباعة بشكل معكوس.

    Screenshotfrom2016-11-1521-33-36.jpg
     
    #75