سؤال

أردت فقط أن أعرف ما إذا كان ذلك ممكنًا بنسبة 100 ٪ ، إذا كانت لغتي مكتملة ، لكتابة برنامج فيه يطبع نفسه (بالطبع لا تستخدم وظيفة قراءة الملف)

لذا ، إذا كان لدى اللغة الأشياء الضرورية حقًا من أجل جعلها كاملة (أود أن أثبت أنه من خلال ترجمة رمز Brainf*ck) ، مثل الإخراج والمتغيرات والظروف و gotos (الجحيم نعم ، غوتوس) ، هل يمكنني المحاولة كتابة Quine فيه؟

أنا أيضًا أسأل هذا لأنني لست متأكدًا من أن Quine يناسب مباشرة قانون Turing بأن آلة Turing قادرة على أي مهمة حسابية. أريد فقط أن أعرف ، لذا لا أحاول لسنوات دون أن أعرف أنه قد يكون من المستحيل.

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

المحلول

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

انظر هنا

نصائح أخرى

واجهت هذه القضية قبل شهرين.

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

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

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

من الممكن أن يكون لديك لغة برمجة لا يمكنها طباعة جميع الرموز في تمثيلها. على سبيل المثال ، قد يقتصر I/O على أحرف ASCII 7 بت مع كلمات رئيسية للغة باللغة العربية. هذا هو الاستثناء الوحيد الذي يمكنني التفكير فيه.

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

مثال على لغة البرمجة الكاملة التي لا تعتبر ترقيمًا مقبولًا:

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

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

من المستحيل كتابة Quines في هذه اللغة.

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