سؤال

الى كل الناس الذين يعرفون حساب التفاضل والتكامل لامدا:ما الفائدة التي جلبتها لك فيما يتعلق بالبرمجة؟هل تنصح الناس بتعلمها؟

هل كانت مفيدة؟

المحلول

إذا كنت تريد البرنامج في أي لغة البرمجة الوظيفية, ، ومن الضروري.أعني، ما مدى فائدة المعرفة عن آلات تورينج؟حسنًا، إذا كتبت C، فإن نموذج اللغة قريب جدًا من آلات تورينج - لديك مؤشر تعليمات وتعليمات حالية، والجهاز يتخذ بعض الإجراءات في الحالة الحالية، ثم ينتقل إلى التعليمات التالية.

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

نصائح أخرى

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

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

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

لأكون صادقًا، فإن تعلم حساب التفاضل والتكامل لامدا قبل البرمجة الوظيفية جعلني أدرك أن الاثنين لا علاقة لهما بأي برمجة حتمية مثل لغة C.

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

لا تتطلب منك غالبية لغات البرمجة الوظيفية على الإطلاق "تعلم" حساب التفاضل والتكامل لامدا، أيًا كان معنى ذلك، فإن حساب التفاضل والتكامل لامدا ضئيل إلى حد الجنون، ويمكنك "تعلم" بديهياته في أقل من ساعة.لمعرفة النتائج منها، مثل نظرية النقطة الثابتة، فإن نظرية تشيرش-روسر وما إلى ذلك لا علاقة لها بالبرمجة الوظيفية.

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

ومع ذلك، على سبيل المثال، لاستخدام Haskell بشكل فعال، فإنك تحتاج إلى فهم بعض الأمور أنظمة النوع, ، بغض النظر عن حساب التفاضل والتكامل لامدا، يمكن تطبيق النظام من النوع System F على جميع "الوظائف" ولا يتطلب أي تجريدات لامدا على الإطلاق.عادة في الرياضيات نقول f :ص^2 -> ص :و (س) = س ^ 2.كان من الممكن أن نقول:و (س) = س ^ 2 ::ر -> ر -> ر.في الواقع، يقترب هاسكل كثيرًا من هذا الترميز.

حساب التفاضل والتكامل لامدا هو شكلية نظرية، ووظائف هاسكل ليست في الحقيقة "تجريدات لامدا" أكثر من f :f(x) = x^2 حقًا، ما يجعل تجريدات لامدا مثيرة للاهتمام هو أنها تمكننا من تعريف ما يُنظر إليه عادةً على أنه "ثوابت" على أنه "وظائف"، ولا توجد لغة وظيفية تفعل ذلك بسبب العبء الحسابي الضخم.إن هاسكل وما شابه هو مجرد شكل مقيد من النظام F نوع النظام يتم تطبيقه على الوظائف المستخدمة في الرياضيات الكلاسيكية اليومية.من المؤكد أن الوظائف في هاسكل ليست هي المتقدمين المجهولين للاختزال الرمزي رسميًا كما هو الحال في حساب التفاضل والتكامل لامدا.معظم لغات البرمجة الوظيفية ليست أنظمة إعادة كتابة رمزية تعتمد على الاختزال.اللثغات هي إلى حد ما ولكن هذا نموذج في حد ذاته و "كلمة لامدا الأساسية" الخاصة بها لا ترضي حقًا تسميتها حساب التفاضل والتكامل لامدا.

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

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

أنا أتفق مع أولئك الذين يقولون أنه من الممكن نظريًا تعلم البرمجة الوظيفية دون تعلم حساب التفاضل والتكامل لامدا - ولكن ما هي الفائدة من ذلك؟ لا تعلم حساب التفاضل والتكامل لامدا؟ليس الأمر كما لو أن الأمر يتطلب استثمارًا كبيرًا للوقت.

على الأرجح، سيساعدك ذلك على فهم البرمجة الوظيفية بشكل أفضل.ولكن حتى لو لم يحدث ذلك، فإنه لا يزال أمرًا رائعًا يستحق التعلم.ال Y-combinator هو شيء من الجمال.

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

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

ما جعلني مدمن مخدرات هو كتاب مينسكي "الحساب":الآلات المحدودة واللانهائية.

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

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

http://en.wikipedia.org/wiki/Lambda_Calculus

أو، إذا كنت تريد المزيد، فهذه مدونتي المخصصة لحساب التفاضل والتكامل لامدا وأشياء من هذا القبيل

http://weblogs.manas.com.ar/lziliani/

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

http://www.amazon.com/Types-Programming-Languages-Benjamin-Pierce/dp/0262162091/ref=sr_1_1?ie=UTF8&s=books&qid=1222088714&sr=8-1

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

لقد سهّل عليّ فهم المفاهيم المتقدمة مثل أنظمة النوع واستراتيجيات التقييم (على سبيل المثال.الاتصال بالاسم مقابل الاتصال بالقيمة).

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

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top