هل هناك أي تطبيق عمل للوضع العكسي التمايز التلقائي لـ Haskell؟

StackOverflow https://stackoverflow.com/questions/2744973

  •  02-10-2019
  •  | 
  •  

سؤال

أقرب تطبيق مرتبط في Haskell الذي رأيته هو الوضع الأمامي في http://hackage.haskell.org/packages/archive/fad/1.0/doc/html/numeric-fad.html.

يبدو أن أقرب البحث ذي الصلة هو الوضع العكسي للغة الوظيفية الأخرى المتعلقة بالمخطط في http://www.bcl.hamilton.ie/~qobi/StalingRad/.

أرى الوضع العكسي في Haskell نوعًا من الكأس المقدسة لكثير من المهام ، على أمل أن يتمكن من استخدام موازاة بيانات Haskell المتداخلة لاكتساب تسريع لطيف في التحسين العددي الثقيل.

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

المحلول

رداً على هذا السؤال ، قمت بتحميل حزمة مسماة ميلادي إلى المتسلل للتعامل مع التمايز التلقائي للوضع العكسي في هاسكل.

داخليًا ، فإنه يستفيد من خدعة من Lava من Andy Gill's Kansas لمراقبة المشاركة في الشريط الذي يسجله لأغراض الانتشار الخلفي ، ويستخدم العلامة التجارية لمستوى النوع لتجنب الحساسيات المربكة.

لقد حاولت الحفاظ على واجهة برمجة التطبيقات على مقربة نسبيًا من حزمة FAD الخاصة بـ Barak Pearlmutter و Jeffrey Mark Siskind ، لكنني لم أستطع مقاومة إجراء تعديلات طفيفة هنا وهناك من أجل العمومية.

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

نصائح أخرى

لدينا مجموعة من تطبيقات إعلان الوضع الأمامي (لدي حتى واحدة في مكتبة Monoids الخاصة بي!) ، ولكن يبدو أن Mode Mode AD لجميع Haskell مستعصية.

للأسف بينما يعطي Pearlmutter و Siskind ترجمة لحساب Lambda ، فإنه لا يعين الأمر إلى شيء يمكنك القيام به من أجل Haskell Lambdas التعسفي ، لا تحصل على خصائص التأمل الصحيحة وبالنظر إلى الطريقة التي يتغير بها شكل الأنواع في الترجمة لا تحصل على شيء غير قابل للتعبئة في موناد أو سهم أو بنية تحكم أخرى.

لقد ذهبت إليها عبر سلسلة من عمليات تبادل البريد الإلكتروني مع Pearlmutter ، ولكن في النهاية كان أفضل ما تمكنت من الحصول عليه هو حل إعلان عكسي لـ EDSL صغير في Haskell ، وليس حلًا لـ Haskell نفسه.

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

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

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

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

foo :: Num a => a -> a -> a

ثم يمكنك إنشاء مثيل a مع نوع قابل للتمييز ، وبالتالي التفرق foo في الوضع الأمامي.

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

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