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

الموضوع في '|||▮ 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,285
    الإعجابات المتلقاة:
    1,616
    1 - FUNCTIONS ON NUMBERS
    الوظائف مع الأرقام
    ربما تكون الوظائف الأكثر ألفة والتي تعلمناها في الدروس السابقة. لقد قلنا أن الوظائف كالصناديق بالنسبة للبيانات والرسم التالي يبين ذلك:
    [​IMG]
    أسم الوظيفة هنا : " + "
    وللتوضيح أكثر نرى البيانات وهما الرقمان 2 و 3 قد تدفقا داخل الصندوق أي داخل الوظيفة, وكانت الوظيفة "+" بإنتظارهما, ومن ثم خرجت لنا بالناتج 5 بعد جمعهما معا أي أن الناتج تدفق للخارج.

    والآن سأعرض لكم بعض الوظائف:

    + إضافة رقمين.
    - طرح الرقم الثاني من الأول
    * ضرب رقمين.
    / قسمة الرقم الأول على الرقم الثاني.
    ABS إظهار القيمة المطلقة للعدد.
    SQRT إظهار الجذر التربيعي للعدد.

    لقد درسنا أول أربعة وظائف والأن سأنتقل لأخر إثنين وهما القيمة المطلقة والجذر التربيعي. هيا بنا نأخذ بعض الأمثلة حول الوظيفة المطلقة ABS ونرى كيف تتدفق البيانات داخلها. إن الوظيفة ABS تعمل على تحويل الرقم الموجب إلى سالب والموجب إلى موجب.
    [​IMG]
    يجب عليكم أن تجعلوا الحروف صغير وليست كبيرة, هكذا (abs -4) والمثال التالي للتوضيح:
    [​IMG]

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

    [​IMG]
    [​IMG]


    ذاكروا جيدا, أتمنى لكم التوفيق.:flower:

     
    #26
    آخر تعديل: ‏6 سبتمبر 2016
  2. التنين الدهبي

    التنين الدهبي عضو مشارك

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

    أخي الكريم ليس صعبا ابتكار روبوت يشبه إلى حد ما الإنسان و يعمل ببرنامج معلوماتي دكي إلى حد ما.
    لكن ما يحصل الآن في هدا المجال و هو الأفكار التي تحاول دمج التكنلوجيا بالدماغ فمثلا خبراء google يحاولون ربط دماغ الإنسان بالشبكة العنكبوتبة عبر توصيلات عصبية....... فمعظم تفكيرهم مركز على الجانب المادي hardware أما بخصوص جانب soft فهم مازالوا بعيدون كل البعد ليدركوا كيفية قرصنة العقل الباطن باستعمال multimedia.


    ما يحصل في الحاضر مع google في مجال الذكاء الصناعي قد حصل مع IBM في بدايات الحاسوب الشخصي حيث كانت تركز أبحاثها على HARD و أهملت SOFT حتى تنبه لدلك بيل غيتس و أسس شركة ميكروسفت العملاقة.
    أخي الكريم ما أقوله هنا ليس من باب التنظير و لكن هو حقيقة انتشرت بقوة السنتين الأخيرتين على الانترنت تحت اسمBrain Hackو أظنني لست الوحيد الذي يشتغل على الفكرة.
    و انصحك بمشاهدة فيلم
    Brain Hack لمزيد من الرؤية.

    أخي الكريم لقد بات واضحا أن الإنسان باختراعه للكمبيوتر فهو كان يحاكي دماغه على صفائح السلسيوم فادن الحاسوب ما هو إلا تمثيل مبسط لدماغ الإنسان. و فهم عمل الحاسوب سيسهل علينا فهم عقل الإنسان و الذكاء الإنساني و تطويره إلى مستويات أعلى و هدا ما اسميه شخصيا الذكاء الإنساني الاصطناعي و ليس الذكاء الصناعي.
    و حتى نسهل الشرح المفصل دعنا نضرب مثالا بجهاز الكمبيوتر . جهاز الكمبيوتر يعمل من خلال أولا جسم : يتكون من مدخلات ( inputs ) ومخرجات ( outputs ) . المدخلات مثل لوحة المفاتيح ( keyboard ) والفأرة ( mouse ) والماسح ( scanner ) ، مثلها مثل مدخلات الإنسان من الحواس كالسمع والبصر والشم والتذوق واللمس . والمخرجات مثل الطابعة والشاشة والمودم ، مثلها كمثل مخرجات الإنسان اللفظية واللالفظية كالنطق والحركات والسلوك والنظرات.
    أن هذا الجسم ، وداخله وحدة عملية مركزية ( CPU ) يحفظ المعلومات، مثلها كمثل المخ لدى الإنسان ، ولهذه الوحدة برنامج من لغة معينة عادة ما يخاطب لغة الكمبيوتر المسماه بلغة الآلة ( machine language ) . هذا البرنامج مهم إذ إمكانات الكمبيوتر معطلة ما لم يكن البرنامج يعمل وبجدارة . أقوى جهاز كمبيوتر بدون برنامج جيد لا يعني شيئا . بل كمبيوتر بإمكانات متواضعة جدا مع برنامج عال المستوى أفضل ، لآن العبرة في النتائج ولا نتائج من جهاز ليس فبه برنامج أو برنامجه متواضع .
    ومثل البرنامج كمثل ما نسميه بالعقل الباطن . البرنامج يدير شؤون الكمبيوتر ويخرج المتطلبات من خلال المخرجات ، والعقل الباطن كذلك يدير شؤون الفرد والجسد ويخرج سلوكيات وتصرفات وأعمال وأقوال.
    هناك شخص مهم يعمل على جهاز الكمبيوتر ، ويسمى بالمبرمج ، هذا الشخص يعدل ويضبط في البرنامج حتى يتلقى ويخرج ما يريده ، مثل هذا الشخص كمثل العقل الواعي ، أنت في البداية تحدد ما تريد ، كمبرمج ، ثم تصيغ البرنامج الذي تريد وتأمر العقل الباطن أن ينفذه ثم ترى النتائج من خلال المخرجات . لو رأيت أن النتائج غير جيدة فأعد تضبيط البرنامج حتى يعطيك المخرجات التي تريد .
    المشكلة هو أن الناس لا تفهم مبادئ البرمجة العصبية اللغوية حتى تطبقها على نفسها لإعادة برمجة العقل الباطن. و هنا تبدأ فكرتي حيث انه كما يمكنك شراء برنامجا حاسوبيا من السوق و تركيبه على الحاسوب، يمكن كذلك شراء برنامج MULTIMEDIA قادر على برمجة العقل الباطن للأفضل و في جميع الميادين.
    الاستعمالات ستكون متعددة فمثلا سيكون برنامج خاص للإقلاع عن التدخين – أو برنامج خاص يساعد على الحفاظ على الصلاة او...............او.............او............فالمجال واعد و الحمد لله........
    أتركك مع هدا الفيديو الملهم

    أخي الكريم لوست كونك مبرمج فهدا جيد و أنصحك بان تدرس علم البرمجة العصبية اللغوية فقد تعطيك أفكار جديدة في هدا الميدان و كذلك أدوات بناء الخوارزميات أي أدوات الشرط في اللغة العربية فهي كثيرة و جد متطورة على أدوات بناء الخوارزميات الغربية IF-THEN-ELS.
    حاول مثلا ان تبتكر لغة برمجة عربية جد متطورة بأدوات الشرط العربية فهي متعددة و جد متخصصة و لا توجد في أي لغة أخرى بل هي كاملة و متكاملة أنزلت في كتاب محكم و بها يعمل العقل الكوني و اللوح المحفوظ.................... فسبحان الله الذي أتقن صنع كل شيء.
    1- ادا كان ...................... فان
    2- كلما ..................... فان
    3- من كانت له ............. فان
    4 -إن كانت له ................... فان
    5- مهما كان .................. فان
    6- حيثما كان ............................ فان
    7- أما احمد ...................... ف ..........و أما زينب ..................ف.............وأما هدى ...................ف...........
    8- لو.......................ل
    9- افعل ...حتى............

    و السلام عليكم و رحمة الله و بركاته.
     
    #27
    آخر تعديل بواسطة المشرف: ‏18 سبتمبر 2016
    أعجب بهذه المشاركة lost|pages
  3. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    :confused::hearteyes::hearteyes::grin::yes:

    شكرا لك أخي التنين الذهبي على ما طرحته هنا. لقد ذكرتني بلغة ج العربية عندما راسلت صاحب اللغة كي أطور فيها وهو استاذ من سوريا ولكن قال لي إنها حكر على الطلبة فقط ولم يعطني الكود البرمجي لها. ولكن أنا أبسط الدروس لأن أعلم أن القادم أصعب وقد أنتهجت مبدأ البساطة كي أوصل المعلومة واضحة. مللت من لغات البرمجة المتداولة أريد شيئا غريبا جدا كلغة الذكاء الصناعي وأيضا أريد معرفه إلى أين سأصل بها. نعم المفردات في العربية كاملة وأفضل لغة من باقي اللغات. شكرا لك مرة أخرى لأنك أيقضت في عقلي فكرة كانت ستندثر. لغة ذكاء صناعي عربية. إن شاء الله بالمثابرة وبوجودكم وبتعاوننا معا سنصل. أنا عندي أيمان لو بـ 1% فهذا يكفي أن هذه المادة ستصل يوما ما لمحبي الذكاء الصناعي. أما بخصوص الخوارزميات فأنا لم أدرسها في الجامعة ولكن قمت بقرأة كتب من الأنترنت فالأنترنت الأن يعتبر من أقوى الجامعات وأنت في المنزل. هناك كتب أجنبية عن الخوارزميات ربما في المستقبل أضع دورة خاصه له ليس مستبعدا فهي مهمة.
     
    #28
    آخر تعديل: ‏27 فبراير 2016
    أعجب بهذه المشاركة التنين الدهبي
  4. التنين الدهبي

    التنين الدهبي عضو مشارك

    المشاركات:
    712
    الإعجابات المتلقاة:
    626
    #29
    آخر تعديل: ‏27 فبراير 2016
    أعجب بهذه المشاركة lost|pages
  5. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    ملاحظة: للأعضاء المتابعين للدورة أرجو أن تكونوا جادين في تعلم اللغة لأنها مهمة جدا. كل واحد منكم يحظر قلما ودفتر وينقل الدروس كتابيا, ذلك أفضل للمراجعة. لأن المواضيع ستكون دسمة قليلا و لاداعي للتململ هذا علم بحاجة لصبر ومثابرة. مازلنا في قسم البيانات والوظائف والكتاب كبير نسبيا 500 صفحة. إن شاء الله بعد الأنتهاء منه سنعمل على جعله كتابا ومرجعا. صحيح الكلمات أجنبية ولكن لابد لنا من تعلمها وسأشرحها لكم. وإن شاء الله في المستقبل لن نكون بحاجة للغات الأجنبية وسيكون لدينا الكثير من اللغات البرمجية العربية. ما أسعى إليه هو سد الثغرة ولو قليلا قدر المستطاع. شكرا
     
    #30
    أعجب بهذه المشاركة كائن من الحضارة العليا
  6. kira

    kira عضو جديد

    المشاركات:
    20
    الإعجابات المتلقاة:
    14
    عزيزي لوست يبدو أنني غفلت كثيرا ولم أعرف بأهمية لغات الذكاء الصناعي وأعتقدت أنها مملة وأيضا كوني أدرس المعلوماتية لاندرس هذا النوع من اللغات واللغة التي أدرسها الأن هي السي شارب حتى تكرمت علينا بدورتك الأكثر من رائعة واللتي لم أرى مثيلا لهذا الشرح من قبل حتى أخبرت أصدقائي عن هذه الدورة وتفاجؤا كما تفاجئت أنا قبلهم بسهولته ومخاطيته عقل الصغير قبل الكبير ونحن إن شاء الله متابعين معك إلى النهاية
    :yes::yes::yes::yes::yes::yes::yes::yes: :wink::wink::wink::wink: :grin::grin::grin::grin:
     
    #31
    أعجب بهذه المشاركة lost|pages
  7. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    تكملة درس الوظائف والبيانات

    لقد درسنا في السابق العمليات الحسابية ولازلنا في الوظائف, واليوم سوف أقوم بعرض وظائف أخرى من نفس العمليات الحسابية ولكن بشكل آخر. نحن الأن نعلم أن العمليات الحسابية تحتوي على رموز كالــ + - * و /.

    ولغة الليسب الجميلة تستخدم وظائف أخرى للجمع addition, الطرح subtraction, الظرب multiplication و القسمة division. وهي على شكل كلمات مختصرة. مثلا عندما نقول addition فالأختصار لهذه الكلمة يكون add و كلمة subtraction يكون إختصارها sub و الكلمة multiplication تصبح mul وأخيرا الكلمة division إلى div, هيا بنا لنرى ذلك في الأمثلة التالية:

    [​IMG][​IMG]

    يجب أن تمارسوا كتابة الأكواد, لأن بالممارسة يتم التعلم بشكل ممتاز, كي تصبحوا مبرمجين في المستقبل.

    المتغيرات Variables


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

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

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

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

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

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

    إن البيانات تسمى DataTypes أنواع البيانات في لغة الليسب Lisp وهي نوعان:

    البيانات العددية Scalar types : مثل الرموز والأرقام و الأحرف.
    البيانات المركبة Data structures : مثل القوائم Lists و السلاسل النصية String و الناقلات vectors(سنتعرف عليه كلما تعمقنا).

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

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

    فلنتخيل برنامج صوتيات كم يحتاج لتخزين القيم؟ أو لعبة أونلاين كبيرة جدا بحاجة لتخزين قيمها لكي تبدأ في العمل!! هذا هو الحاسوب - كلما قمنا بتشغيل أي برنامج يقوم الحاسوب فورا بتخزين القيم الخاصة بذلك البرنامج. حتى إن نظام التشغيل ويندوز أو أي نظام كان, له قيم عند بداية التشغيل(إقلاع) لابد من حجز مساحة للقيم والبيانات لذلك النظام كي يعمل.

    مرة أخرى لا ننسى أننا نتعامل مع قوائم ((()))())(())))) لغة الليسبLisp. أرجو منكم المذاكرة جيدا

    دمتم بخير

     
    #32
    آخر تعديل: ‏13 نوفمبر 2016
  8. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616

    لقد تعلمنا في الدرس السابق ماهية المتغيرات, واليوم سنتعلم الكثير حولها, إن المتغيرات هي أسماء مخزنة في الذاكرة نضيف إليها القيم, مثلا number = 5 هنا إسم المتغير يدعى number ويحتوي على القيمة 5. هل تذكرون في الرياضيات س = 1 , ص = 6؟ إن س و ص هما متغيران.

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

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

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

    تذكر : كل تعبير في لغة الليسب Lisp يحتوي على عدد من الأقواس parentheses () المتوازنة. قوس في اليسار وواحد في اليمين ومهما كانت التعابير بسيطة فالأقواس متناسقة ومتوازنة. () (()) ((())) (((())))

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

    تذكر: إن الدوال دائما تأتي في مقدمة تعابير لغة الليسب Lisp ومن ثم تأتي الـ arguments.

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

    هل تذكرون الدروس السابقة عندما قمنا بجمع وطرح الأرقام داخل الأقواس؟ مثلا (3 1 6+) هنا يطلق على مجموعة الأعداد الثلاثة arguments أي المحتويات. إن للغة الليسب Lisp قواعد نحوية مثل كل اللغات في البداية تكون الدالة أو المعاملات الحسابية ومن ثم تأتي المحتويات ليشكل لنا تعبير نحوي خاص بلغة الليسب Lisp.

    إستخدام المتغيرات Using Variable

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

    القاعدة الأولى

    (setq name-of-variable value-to-store)

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

    (setq pi 3.14)

    في المثال فوق قمنا بتعريف متغير إسمه pi وأضفنا له القيمة العددية 3.14 حيث إن الدالة setq تقوم بتخزين القيمة 3.14 في المتغير pi في الذاكرة.

    [​IMG]


    مثال آخر:

    في هذا المثال نرى ثلاث عمليات حسابية وهي الجمع والطرح والقسمة, قمنا أولا بتعريف متغير إسمه numbers لكي نخزن فيه ناتج العمليات الثلاثة حيث إن الدالة setq ستقون بتخزين الناتج في المتغير numbers وذلك بعد أن تتم العلميات. أولا ستقوم عملية الطرح بطرح 5 من 3 وسيكون الناتج 2 وبعد ذلك ستقوم القسمة بتقسيم 10 على 2 والناتج 5, بعد ذلك يإتي دور الجمع add والتي ستقوم بدورها في جمع ناتج العمليتين السابقتين وهما 5 و 2 وسيصبح لدينا الناتج النهائي 7.

    [​IMG]


    سنكمل في الدرس القادم بمزيد من الأمثلة حتى تترسخ في العقول ولن نتقدم إلا و المنتسبين:nomouth: ملمين بكل شي.

    دمتم بخير
     
    #33
    آخر تعديل: ‏7 سبتمبر 2016
    ShiMauRo و Rami معجبون بهذا.
  9. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    لنتخيل آخر مسألة لو كانت لغة الليسب Lisp بالعربي

    (خزن الأرقام(إجمع(إطرح 5 3)(إقسم 10 2)))
     
    #34
  10. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    [​IMG]

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

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

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

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

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

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

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


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

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

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

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

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

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

     
    #35
    آخر تعديل: ‏13 نوفمبر 2016
  11. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    هنا في هذه المرحلة تم تصميم لغات برمجة أكثر نجاحا حول فكرة مركزية واحدة, حيث كان التصميم عاما وبناء الجمل كان أكثر سهولة للمبرمجين المبتدئين ومع ذلك فاللغات الجيدة أصبحت صعبة, ومن هذه اللغات الفورتران FORTRAN, البيسك BASIC و السي C. في الحقيقة كانت مجرد خليط من الأفكار القديمة ونسخت بعضها من بعض بحيث فقدت الجمال الحقيقي لها. ربما تكون سهلة بطرق سطحية ولكن هذه اللغات الشرسة جابت الغابات طوال عقود للبحث عن فريسة سهلة. :smile:

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

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

    [​IMG]

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

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


    [​IMG]

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

    لقد أعطى هذا ميزة للكروماغنين 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.

    [​IMG]
     
    #36
    آخر تعديل: ‏13 نوفمبر 2016
    ShiMauRo و Rami معجبون بهذا.
  12. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    من أين إستمدت لغة الليسب Lisp على هذه القوة؟

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

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

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

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

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

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


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


    ---------------------------
    حقوق الحفظ والملكية
    مكتبة ألفا العلمية

     
    #37
    آخر تعديل: ‏8 نوفمبر 2016
    ShiMauRo و Rami معجبون بهذا.
  13. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    التمارين
    Exercises

    هذه التمارين مراجعة لما تعلمنا سابقا في الدورةأرجو منكم تطبيقها على حواسيبكم والتدرب عليهامازلنا في مرحلة التأسيس لهذه اللغةكل رقم تمرين لحاله


    [​IMG]


     
    #38
    آخر تعديل: ‏10 سبتمبر 2016
    ShiMauRo و Rami معجبون بهذا.
  14. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    [​IMG]
     
    #39
    ShiMauRo و Rami معجبون بهذا.
  15. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    لقد تعلمنا في الدروس السابقة:
    الوظائف الحسابية: - * / + ABS SQRT و الدالة setq
    ===========================
    درس اليوم : المستندات PREDICATE

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

    تعلمنا في الرياضيات علمية أكبر من وأصغر من, ونرمز لأكبر من بـ < ونرمز لأصغر من بـ >. هذه الرموز عندما نسند لها قيمتين تعطينا الناتج إما صحيحا أو خطأ. فمثلا عندما نقول 3>4 فالنتيجة في غير صحيحة وسيظهر لنا المترجم الناتج NIL وعندما نقول مثلا 100 > 50 فالنتيجة ستكون صحيحة وسيظهر لنا المترجم الناتج T أي صحيح.

    هيا إلى الأمثلة:
    [​IMG]

    مترجمات الليسب كثيرة أحيانا تعطينا True و أحيانا T فلا فرق.
    أرجو كم المذاكرة جيدا والتمرن على الدرس الجديد بكتابة الكثير
    من الأكواد, لا تقلقوا كل درسين أو ثلاثة سأعمل تمارين وإمتحان.
    موفقين
     
    #40
    ShiMauRo و Rami معجبون بهذا.
  16. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    تعلمنا في الدرس السابق حول رموز الأسناد وهي أكبر من < و أصغر من >.
    =====================================

    سنتعلم اليوم باقي الرموز وهما الرمز يساوي = و أكبر من أو يساوي =< و أصغر من أو يساوي =>.
    الرموز في الدرس السابق ودرس اليوم تعتبر رموز منطقية أي نتيجتها أما صحيحة True أو خطأ NIL.

    الرمز يساوي = :
    يلعب هذا الرمز دورا مهما عندما يأتي مع قيمتين حيث يمثل الشرط هنا, أي عندما نقول ( 5 5 = ) فنعني بذلك هل 5 تساوي 5؟ والجواب سيكون صحيحا أي T.

    الرمز لا يساوي =/ :
    هذا الرمز عكس اليساوي يحدد لنا إن كانت إحدى القيمتين لا تساوي الأخرى, أي عندما نقول
    ( 5 9 =/ ) فنقول هل 9 لا تساوي 5؟ والجواب سيكون صحيحا أي T.


    الرمز =< أكبر من أو يساوي:
    هذا الرمز يحدد لنا إحدى القيمتين إن كانت أكبر من الأخرى أو تساويها, أن كانت أكبر من أو تساوي فهي صحيحة وإن كانت العكس فالنتيجة ستكون خطأ NIL. مثال ( 60 50 =<) هنا نقول هل الـ 50 أكبر من أو تساوي الـ 60؟ طبعا لا إذا فالنتيجة ستكون خطا NIL.

    الرمز => أصغر من أو يساوي:
    هنا أيضا نرى رمز أصغر من أو يساوي, أن كانت إحدي القيمتين أصغر من أو تساوي فهي صحيحة وإن كانت العكس فالنتيجة ستكون خطأ NIL.
    مثال ( 100 5 =>) هنا نقول هل الـ 5 أصغر من أو تساوي الـ 100؟ طبعا نعم إذا فالنتيجة ستكون صحيحة T.

    إلى الأمثلة على شاشة الأوامر:
    أرجو منكم تطبيق الأمثلة التدرب جيدا :innocent:
    [​IMG]




    [​IMG]
     
    #41
    آخر تعديل: ‏11 سبتمبر 2016
  17. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    الرمز max والرمز min, هذان الرمزان مهمتهما المقارنة بين أي عدد من القيم وإخراج القيمة الأكبر والأصغر.
    فمثلا الرمز max يعطينا القيمة الأكبر عند مقارنة عدة أعداد مع بعضها وكذلك الرمز min يعطينا القيمة الصغرى. مثلا هنا نرى ثلاثة قيم ( max 4 5 6) والناتج سيكون العدد 6 لأنه الأكبر هنا. وهنا عندنا أربعة أعداد ( min 5 77 0 4) سيقوم الرمز min بمقارنة الأعداد وإخراج لنا النتيجة الصغرى من بينهم وهي القيمة صفر 0.

    الأمثلة:
    [​IMG]
     
    #42
    أعجب بهذه المشاركة ShiMauRo
  18. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    [​IMG]

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

    تذكر : نحن نتعلم لغة قديمة جدا وقوية لم تبنى من لغة أخرى.

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

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



     
    #43
    آخر تعديل: ‏15 نوفمبر 2016
    أعجب بهذه المشاركة كائن من الحضارة العليا
  19. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    التقييم
    Evaluation


    في لغة الليسب Lisp عندما نقوم بكتابة كود برمجي يتم تقييم هذا التعبير. يدعى ذلك المستوى العالي أي نحن نكتب التعابير البرمجية في مستوى أعلى من مستوى الآلة ومن ثم يقوم المترجم بتحويل تلك التعابير والأكواد البرمجية للغة الآلة. ماذا نعني بالتقييم؟ لغة الليسب Lisp تقوم بتقييم العناصر قبل تنفيذها. كيف؟! لنلقي نظرة على هذا التعبير البسيط:
    (5 4 3 2 1 +)

    + : علامة الزائد هذه تسمى معامل أو وظيفه ولها مهمة جمع العناصر.
    العناصر: هي تلك الأعداد التي بداخل التعبير البرمجي بين القوسين 1 2 3 4 5
    هل تذكرون arguments؟ نعني بها العناصر arg1 arg2 arg3 إلخ.

    لغة الليسب Lisp تقوم بتقييم العناصر قبل تنفيذها فهي تقيم 1 كواحد وتقيم 2 كإثنان وتقيم 3 كثلاثة وهكذا وبعد ذلك تمرر العناصر إلى الوظيفه (+) لتقوم بدورها, و دور الوظيفة + القيام بجمع تلك العناصر. هكذا تقرأ لغة الليسب Lisp التعبير عند تنفيذها من اليسار إلى اليمين. ولكن ما فائدة التقييم؟ إن التقييم يشرح لك كيف تقوم اللغة بالتعامل مع تعابيرها البرمجية, تقييم تمرير ومن ثم التنفيذ.

    هناك معامل لا يتبع قواعد التقييم في لغة الليسب Lisp وهو معامل الأقتباس quote ( ' ). إن هذا المعامل يقوم بطباعة الجملة التعبيرية نفسها من دون تنفيذ ما بداخلها. تستطيع إستخدام الأختصار بإستخدام الفاصلة بدلا من كتابة كلمة quote أمام أي جملة تعبيرية.

    مثال:

    [​IMG]
    تذكر: نحن في درس الوظائف

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

    مثال:
    1 - قمنا في هذا المثال الرائع بإستخدام المعامل cons والمعامل (') الأقتباس, وفي الجملة التعبيرية الأولى تحتوي على عنصرين وهما حرف a وقائمة أخرى تحتوي على ثلاث عناصر. سيقوم المعامل cons ببناء قائمة جديدة وضم حرف a و القائمة الأخرى إليه كما نرى في النتيجة.

    2- قمنا بضم القائمة الاولى بداخل القائمة الثانية في جملة تعبيرية واحدة.
    3 - هنا لم نستخدم الأحرف وعوضا عن ذلك قمنا بتجربة هذه الوظائف على الأرقام
    ونري كيف أننا تمكنا من بناء قائمة جديدة تضم العدد 100 مع باقي الأرقام.


    [​IMG]


    الوظيفة car و cdr و third:

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

    مثال:

    [​IMG]



     
    #44
    آخر تعديل: ‏15 نوفمبر 2016
    أعجب بهذه المشاركة كائن من الحضارة العليا
  20. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    تكملة لدرس القوائم سنتعلم اليوم

    الوظائف: length - First - Second - Equal - Rest

    Length : هذه الدالة وظيفتها حساب طول القائمة.
    First : هذه الدالة وظيفتها طباعة لنا أول عنصر في القائمة.
    Sceond: هذه الدالة وظيفتها طباعة العنصر الثاني في القائمة.
    third: تعلمناها في الدرس السابق.
    Equal: تقوم هذه الدالة بالتحقق إن كانت القوائم والعناصر متشابهه.
    Rest: هذه الدالة ترجع لها القائمة بإستثناء أول عنصر.

    الأمثلة:
    [​IMG]
    1- الدالة first قامت بطباعة أول عنصر لنا وهو Red.
    2 - أيضا الدالة second قامت بإرجاع ثاني عنصر لنا في القائمة وهو cat.
    3 - الدالة length أرجعت لنا النتيجة 0 أي القائمة مفرغة أي خاليه لا يوجد بها عنصر.
    4 - الدالة rest ترجع لنا طباعة القائمة من دون أول عنصر.
    5 - أما الدالة equal فتتحقق من تساوي القائمتين إن كانتا صحيحتين فالنتيجة ستكون T.



     
    #45
    آخر تعديل: ‏16 سبتمبر 2016
  21. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    درس اليوم إكمالا لدرس المتغيرات سابقا

    Global Variable & Local Variable
    المتغيرات العامة والمتغيرات المحلية


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

    الصيغة العامة للتعريف المتغيرات العامة:

    (defvar - variable name - value of variable)
    أولا نكتب الدالة defvar ثم إسم المتغير وبعد ذلك قيمة المتغير.

    مثال:
    (defvar number 100)
    (defvar value 120)
    (defvar value2 70)

    في المثال فوق قمنا بتعريف ثلاث متغيرات وهم, number - value - value2, وأسندنا لكل واحدة منهم قمية معينة.

    دالة الطباعة write , write-line, print

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

    مثال:

    (defvar number 100)
    (write number)​
    هل ترون كم هو جميل؟ في الأول قمنا بتعريف متغير عام يحمل القيمة 100.
    السطر الثاني إستخدمنا الدالة write لطباعة قيمة المتغير number.


    ما الفرق بين write و write-line؟
    كلاهما متشابهان في طباعة الأمر البرمجي, ولكن write-line تقوم بالنزول سطر بعد تنفيذ الأمر.

    الدالة print:
    إن الدالة print مشابهة في لغات البرمجة اﻷخرى وتقوم بطباعة الجمل والنصوص والقيم حالها حال البقية فوق.

    مثال:

    (print 500)​


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

    دمتم بخير

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

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    [​IMG]

    بيئة تطوير متكاملة كنت أعمل عليها كثيرا أثناء دراستي ولم أكن أعلم أنها تدعم لغة ليسب Lisp, هذه البيئة تدعم الكثير من اللغات وهي المتصدرة في نظام أبونتو لينكس ومن لديه ويندوز يستطيع تحميل هذه البيئة الجميلة. بدلا من كتابة الأكواد كل مرة في بيئة شاشة الأومر جربت كتابتها في برنامج جني وبعد ذلك قمت بتخزين الملف قبل التنفيذ لنفترض أن الملف إسمه myproject سيكون هكذا myproject.lisp بعد ذلك قمت بتنفيذ الأمر من القائمة نختار Build ومن ثم Execute بعدها رأيت النتائج تظهر بشكل رائع على شاشة الأوامر. لتحميل هذه البيئة من الموقع الرسمي.
    https://www.geany.org/

    [​IMG]



     
    #47
    آخر تعديل: ‏15 نوفمبر 2016
  23. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    مرحبا من جديد,
    درس اليوم سيكون عبارة عن شرح التمارين التي كانت في الدرس السابق ولكن هذه المرة في بيئة Geany.
    في التمرين قمنا بكتابة ثلاثة جمل:


    اﻷولى إستخدمنا عبارة write-line والتي تختص في طباعة النصوص String (وكلمة String تعني سلاسل أي النصوص على شكل سلاسل وعند طباعة جملة ما لابد من وضعها بين علامتي إقتباس مزدوج "") وهي تقوم بطباعة النص ومن ثم تترك سطرا بعد ذلك.

    الثانية قمنا بتعريف متغير إسمه value وأسندنا له القيمة 100 وذلك بإستخدام الدالة setq التي تعلمناها سابقا ومهمتها كما عرفنا هي تخزين القيمة داخل المتغير, بعد ذلك طلبنا من الدالة write طباعة النتيجة.

    الثالثة أيضا مثل الثانيه ولكن هذه المرة المتغير value2 هو متغير عام و أسندت له القيمة وهي 250. للتنفيذ نختار من القائمة فوق build - > Execute.
    نرى النتائج في شاشة الأوامر على اليمين تعرض لنا النتائج بشكل جميل.

    Screenshotfrom2016-09-2102-35-26.jpg
     
    #48
    آخر تعديل: ‏15 نوفمبر 2016
    أعجب بهذه المشاركة Rami
  24. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    Screenshotfrom2016-09-2118-07-46.jpg

    1 - في المثال فوق قمنا بطباعة الجملة الأولى : إستخدام الأقتباس لا يقيم العناصر فيقوم المترجم بطباعة التعبير كما هو في السطر الثاني.
    2 - طباعة التعبير كما هو بسبب وجود الأقتباس (') التي درسنا عنها سابقا.
    3 - طباعة سطر فاضي
    4 - طباعة الجملة الثانية: عدم إستخدام الأقتباس يقييم المترجم التعبير البرمجي ويطبع لنا الناتج
    5 - هنا لاتوجد إقتباس سيقوم المترجم بتقييم التعبير والعناصر وسيطبع لنا النتيجة.
     
    #49
    آخر تعديل: ‏15 نوفمبر 2016
    أعجب بهذه المشاركة Rami
  25. lost|pages

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

    المشاركات:
    1,285
    الإعجابات المتلقاة:
    1,616
    الوظيفة defparameter

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


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

    لنرى الأن كيفية عمل الوظيفة defparameter:
    (الوظيفه ثم أسم المتغير ثم قيمة المتغير)


    - عرفنا متغيرين الأول number يحمل القيمة 400 والثاني number2 يحمل القيمة 800 وقمنا بعد ذلك بطباعتهما.



    r5.jpg
     
    #50