سؤال

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

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

المحلول

وانها قليلا مثل ركوب الدراجة، فإنه يأخذ فقط الممارسة. محاولة حل بعض مشاكل معها، ربما ProjectEuler و في نهاية المطاف سوف انقر.

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

وحظا سعيدا!

نصائح أخرى

حسنًا، بالنسبة لي، واجهت نفس المشكلة التي واجهتها في البداية عندما بدأت في استخدام OCAML، ولكن الحيلة هي أنه يجب عليك البدء في التفكير ماذا تريد من الكود و لا كيف افعلها!!!

على سبيل المثال، لحساب مربع عناصر القائمة، ننسى طول القائمة ومثل هذه الحيل، فقط فكر رياضيا مثل هذا:

  • إذا كانت القائمة فارغة -> لقد انتهيت

  • إذا لم يكن الأمر كذلك، فيجب أن تحتوي القائمة على رأس وذيل -> تقوم بحساب مربع الرأس، ثم تطلب من وظيفتك أن تفعل الشيء نفسه مع الذيل.

فقط فكر في الحالة العامة والحالة الأساسية، وأنك تصدر البيانات ولا تعدلها (إلا إذا كنت تريد تعديلها؛)).

حظ سعيد!

هل يمكن أن تحقق من الصغير مدبر المكائد .

وماذا عن هذا: http://www.defmacro.org/ramblings/lisp.html

وبل هو بسيط جدا، خطوة بخطوة مقدمة إلى التفكير في ثغة من وجهة نظر مبرمج منتظم الضروري (جافا، C #، الخ.).

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

http://www.plt-scheme.org/

وبالإضافة إلى ذلك "هيكل وتفسير برامج الكمبيوتر" من H. Abelssn، G. سوسمان، وJ. سوسمان هو كتاب جيد للغاية فيما يتعلق مخطط (والبرمجة).

والتحيات

وMUE

ونلقي نظرة على 99 مشاكل Lispy

وبعض الأفكار حول اللثغ، لا تقتصر على كلوجر (أنا لست خبير اللثغة، لذلك آمل انهم في الغالب الصحيح والمفيد):

ترقيمها في AST

وأنا أعرف القليل عن مترجم أو نظرية مترجم، ولكن في كل مرة كنت كود في اللثغة، يدهشني أنه يشعر وكأنه بناء مباشرة من AST.

وهذا جزء من ما "كود = البيانات" وسائل الترميز في اللثغة هو الكثير مثل ملء هياكل البيانات (القوائم المتداخلة) مع العقد AST. مذهلة، وأنه من السهل أن تقرأ أيضا (مع محرر النصوص الأيمن).

البرمجة برمجة اللغة

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

وهذا يجعل بناء DSL أو مترجم في اللثغة من السهل جدا (انظر أيضا الفوقية التعميم تقييم ).

أبدا إعادة تشغيل أي شيء

وفي معظم النظم اللثغة، رمز (بما في ذلك الوثائق) يمكن introspected والساخنة تبادلت في وقت التشغيل.

خيارات متقدمة OOP

وبعد ذلك، معظم أنظمة اللثغة يكون نوعا من نظام كائن مشتق من CLOS، وهو نظام كائن المتقدم (بالمقارنة مع العديد من التطبيقات OOP) وشكلي (انظر <لأ href = "http://en.wikipedia.org/ ويكي / The_Art_of_the_Metaobject_Protocol "يختلط =" نوفولو noreferrer "> فن البروتوكول Metaobject ).

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

وفقط تذكر: انها جميع البيانات

!

اكتب بعض الوظائف الكلاسيكية البسيطة التي يجيدها Lisp، مثل

  • عكس القائمة

  • معرفة ما إذا كانت الذرة موجودة في مكان ما في تعبير s

  • اكتب EQUAL لمعرفة ما إذا كان تعبيران s متساويين

  • اكتب FRINGE للحصول على قائمة الذرات الموجودة على هامش تعبير s

  • اكتب SUBST، ثم اكتب SUBLIS

  • التمايز الرمزي

  • التبسيط الجبري

  • اكتب تقييمًا بسيطًا و/أو قدم طلبًا

افهم أن Lisp جيد لهذه الأنواع من البرامج الوظيفية التي ليس لها أي آثار جانبية.

كما أنه مفيد للبرامج ذات التأثير الجانبي (غير الوظيفية)، ولكنها تشبه "البرامج" أكثر من "الوظائف".

أيهما أفضل لتطبيق معين يعتمد على التطبيق.بشكل عام، يجب أن يحتوي على ما لا يقل ولا يزيد عن معلومات الحالة اللازمة.

سهل!

M-x  lisp-mode

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

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

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

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

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

وممارستي الشخصية هي إيجاد مشروع صغير (وهو ما قد يستغرق 3-5 ليال القرصنة بعيدا) وتنفيذه. ماذا عن أداة بلوق مرشح؟ ربما مجرد أبراج هانوي أو تنفيذ قائمة مرتبط (تلك هي عادة مشاريع 1-ليلة).

والطريقة التي يعمل بها عادة هو أنني تنفيذه سيئة للمرة الأولى، ورمي بعيدا ما كان لي، وتستقر في نهاية المطاف بضع ساعات في.

ومساعدة كبيرة يأخذ دورة في شيء من هذا القبيل ... أم ... LISP! :) والواجبات المنزلية ويجبرك على مواجهة الكثير من المفاهيم والنقر بالنسبة لي قبل وقت طويل من انتهاء الفصل الدراسي.

وحظا سعيدا !!

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

وكتابة مترجم ليسب في اللثغة.

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

وبعد ذلك محاولة لتنفيذ بعض الشيء الصغير (في محاولة لجعلها مفيدة لك أو قد لا يكون الدافع).

اللثغة في مربع و هو وسيلة رائعة للحصول على قدميك الرطب.

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

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

يحرر:ومجد لاختيار لغة وظيفية، كان الطلاب الأقل قد فعلوا ذلك للتو في جافا :)

والذي قال أنه سيكون فوق؟ أنا الخلط دائما

ولكن إذا كنت تفكر في مقدار التجريد من الممكن إخفاء بعيدا، وراء وحدات الماكرو ثغة. ثم عقلك سوف تنفجر.

:)

ويهمني ان تحقق من البرمجة كلوجر. انه كتاب عظيم لغير lispers.

بالإضافة إلى ما اقترحه SO'ers الآخرون بالفعل، إليك سنتاني:

  1. ابدأ في تعلم اللغة وجرب بعض المسائل العددية/الهواية البسيطة في اللغة
  2. مهم: انشر الحل/الكود إلى StackOverflow، واطلب آراء الأشخاص إذا كان هذا هو LISPy حقًا طريق للقيام بذلك.

حظا سعيدا!

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