سؤال

كنت أقرأ قليلاً عن لغة البرمجة HQ9+ ( http://esolangs.org/wiki/hq9 , http://en.wikipedia.org/wiki/hq9٪2b و http://www.cliff.biffle.org/esoterica/hq9plus.html ) ، ويخبرني بشيء عن ما يسمى "تراكم" يمكن زيادة ، ولكن لا يمكن الوصول إليه. أيضا ، باستخدام + لا تتلاعب بالنتيجة:

الشفرة

H+H

نتيجة

Hello World
Hello World

هل يمكن لأي شخص أن يشرح لي كيف يعمل هذا ، وماذا يفعل هذا ، وإذا كان الأمر منطقيًا؟ شكرًا

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

المحلول

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

نصائح أخرى

إنها مزحة - إنها فكاهة.

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

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

(ملاحظة المحرر: أخذ بوب مدس اليوم لكنهم لم يركلوا بعد ؛ وبالتالي ، ربما هناك حاجة إلى مزيد من التفسير. ما أعتقد أن بوب يحاول قوله هو أن HQ9+ عديمة الفائدة كلغة برمجة ، في حد ذاتها ؛ ومع ذلك ، يمكن أن يكون تنفيذها مفيدًا بالفعل في سياق تعلم كيفية تنفيذ شيء ما بنجاح بلغة جديدة. حسنًا ، سأذهب وأتجعيد بهدوء في ظهر دماغ بوب الآن وأدعه يعود إلى العمل ... مهما كان الأمر عندما لا أمانع المتجر ...).

على أي حال ... التنفيذ في clojure يتبع:

(defn hq9+ [& args]
  "HQ9+ interpreter"

  (loop [program      (apply concat args)
         accumulator  0]
    (if (not (empty? program))
      (case (first program)
        \H (println "Hello, World!")
        \Q (println (first (concat args)))
        \9 (apply println (map #(str % " bottles of beer on the wall, "
                                      % " bottles of beer, if one of those bottles should happen to fall, "
                                      (if (> % 0) (- % 1) 99) " bottles of beer on the wall") (reverse (range 100))))
        \+ (inc accumulator)
            (println "invalid instruction: " (first program)))) ; default case
    (if (> (count program) 1)
       (recur (rest program) accumulator))))

لاحظ أن هذا التنفيذ يقبل فقط الأوامر التي تم تمريرها في الوظيفة كمعلمات ؛ لا يقرأ ملف لبرنامجه. قد يتم علاج هذا في الإصدارات المستقبلية. لاحظ أيضًا أن هذا تطبيق "صارم" للغة - الصفحة الأصلية (في آلة Wayback) يوضح بوضوح أنه يجب قبول الحالة العليا فقط "H و" Q ، على الرغم من أنها يدل يمكن أيضًا قبول الحروف ذات الحالة الأدنى. نظرًا لأن جزءًا من نقطة تنفيذ أي لغة برمجة هو الالتزام الصارم بالمواصفات كما هو مكتوب ، يتم كتابة هذا الإصدار من HQ9+ لقبول الأحرف العلوية فقط. إذا نشأت الحاجة ، فأنا على استعداد تمامًا لتأسيس دين ، اسمه مبدئيًا لدعوة قفل القبعات المقدسة ، والتي ستعلن عن استخدام الحالة العليا التي سيقوم بها فريد (إلهنا - فريد - يبدو مثل هذا أ ودي اسم إله ، أليس كذلك؟) ، وسوف يعتبر استخدام الحروف السفلية ليكون لعنة ... أقصد ، أن تكون لعنة!

مشاركة واستمتع.

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

الإجابة الصحيحة هي الإجابة التي تم التلميح إليها من خلال الإجابات الأخرى ولكن لم يتم ذكرها بشكل صريح تمامًا: إن تأثير زيادة التراكم غير محدد من خلال مواصفات اللغة وتركها كخيار للتنفيذ.

في الواقع ، أنا مخطئ.

المتراكم هو السجل الذي يتم فيه تخزين نتيجة الحساب الأخير. في Intel X86 ، قد يتم تحديد أي سجل باعتباره التراكم ، إلا في حالة MUL.

مصدر:

http://en.wikipedia.org/wiki/accumulator_(computing)

لقد فوجئت للغاية في المرة الأولى التي زرت الموقع الثالث في سؤالك لاكتشاف زميل في المدرسة كتب تطبيق OCAML في أسفل الصفحة.

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