سؤال

لقد اكتشفت للتو مكتبة Boost Phoenix (مخبأة في مشروع الروح) وكمروحة لأسلوب البرمجة الوظيفية (ولكن لا تزال هواة ؛ بعض الخبرة الصغيرة مع Haskell و Scheme) أردت أن ألعب مع هذه المكتبة للتعلم حول تطبيقات معقولة لهذه المكتبة.

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

مثال صغير وبسيط هو ما يلي: هناك نوع من مشكلة التوجيه (مثل TSP) ، والتي تستخدم مصفوفة المسافة الإقليدية. نحن نفترض أن بعض قيم مصفوفة المسافة لا تستخدم أبدًا ، وبعضها يستخدم في كثير من الأحيان (لذلك ليس من الجيد حسابها أثناء الطيران لكل مكالمة). الآن يبدو أنه من المعقول أن يكون لديك ملف بنية بيانات كسول عقد قيم المسافة. كيف سيكون ذلك ممكنًا مع فينيكس؟ (تجاهل حقيقة أنه سيتم القيام به بسهولة بدون برمجة على طراز FP على الإطلاق) لم يسمح لي قراءة الوثائق الرسمية لـ Phoenix بما يكفي للإجابة على ذلك.

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

ماذا يعني استخدام ناقل مع جميع الوظائف البطيئة المحددة في فينيكس؟ على الرغم من ساذجتي ، حاولت ملء مصفومين (متجه>) بقيم عشوائية ، أحدهما مع push_back العادية ، والآخر مع Boost :: phoenix :: push_back وحاولت قراءة كمية صغيرة فقط من هذه المصفوفات وتخزينها في حاوية للطباعة. كان الكسول واحد فارغا. هل أستخدم فينيكس بطريقة خاطئة / يجب أن يكون ممكنًا؟ أم أنني أساءت فهم وظيفة الحاويات/الخوارزميات في فينيكس. فكرة صغيرة عن الأخير هو وجود بنية قائمة خاصة في مكتبة FP ++ ، والتي أثرت على Phoenix.

بالإضافة إلى ذلك:

  • ماذا تستخدم فينيكس؟
  • هل تعرف بعض العوامل الجيدة فيما يتعلق بفينيكس؟ (البرامج التعليمية ، إدخالات المدونة ...)

شكرا على كل اسهاماتك!

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

المحلول

كما هو مطلوب ، تعليقي (مع الإضافات والتعديلات الصغيرة) كإجابة ...

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

أنصحك بالابتعاد عن فينيكس لفترة طويلة. أنا أحب FP أيضًا ، لكن FP في C ++ أكثر قبيحًا من قابلية التبادل في Haskell (سيكونون وجهاً لوجه ولكن C ++ قبيح بالفعل و Haskell ، على الأقل وفقًا لاري وول ، أجمل لغة على الإطلاق ؛)). تعلم واستخدم FP ، وعندما تكون جيدًا في ذلك واضطرت إلى استخدام C ++ ، استخدم Phoenix. ولكن بالنسبة للتعلم ، فإن المكتبة التي تملأ نموذجًا مختلفًا تمامًا على لغة معقدة بالفعل (أي FP في C ++) غير مستحسن.

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