Подтвердить что ты не робот

Что такое "аккумулятор" в HQ9 +?

Я просто немного читал о языке программирования 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

Может ли кто-нибудь объяснить мне, как это работает, что это делает, и если это даже имеет какой-то смысл? Благодаря

4b9b3361

Ответ 1

Написав реализацию, я думаю, что могу без всяких сомнений сказать, что это не имеет никакого смысла. Я советую вам не беспокоиться об этом; это очень глупый язык.

Ответ 2

Это шутка.

Также существует объектно-ориентированное расширение HQ9 +, называемое HQ9 ++. Он имеет новую команду ++, которая создает экземпляр объекта и, по соображениям обратной совместимости, также дважды увеличивает регистр накопителя. И снова, поскольку нет способа хранить, извлекать, получать доступ, манипулировать, печатать или иным образом воздействовать на объект, это совершенно бесполезно.

Ответ 3

Недавно завершив реализацию в Clojure (что следует), я могу с уверенностью сказать, что аккумулятор является абсолютно важным для успешной реализации HQ9+. Без него осталась бы реализация HQ9, которая, несомненно, достойная сама по себе, явно отличается, и, таким образом, HQ9 + без аккумулятора и инструкция для его увеличения, таким образом, НЕ будут реализацией HQ9 +.

(Примечание редактора: Боб сегодня принял свои медики, но они пока еще не вышли в ногу, поэтому, возможно, необходимы дополнительные объяснения. То, что я считаю, Боб пытается сказать, что HQ9 + бесполезен как язык программирования, за se, однако его реализация может быть действительно полезной в контексте обучения тому, как успешно реализовать что-то на новом языке. Хорошо, я просто пойду и покажусь тихо в задней части мозга Боба и позволю ему вернуться к работе... что бы он ни делал, когда я не пробовал хранить...).

В любом случае... реализация в 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 Machine) ясно показывает, что только UPPER CASE 'H и "Q" следует принять, хотя это означает, что также могут быть приняты строчные буквы. Поскольку часть реализации любого языка программирования - строго придерживаться спецификации, как написано, эта версия HQ9 + записывается только для принятия заглавных букв. Если возникнет такая необходимость, я полностью готов к тому, чтобы найти религию, предварительно названную СОЗЫВОМ СВЯТОГО ЗАБОЛЕВАНИЯ CAPS, который заявит, что использование верхнего регистра должно быть записано FRED (наш бог - Фред - кажется, что такой дружелюбное имя для бога, не так ли?), и будет считать, что буквы в нижнем регистре являются анафемой... Я ЗНАЮ, ЧТОБЫ БЫТЬ АНАТЕМЕЙ!

Поделитесь и наслаждайтесь.

Ответ 4

Он увеличивает что-то недоступное, а не специфицированное и, по-видимому, даже не используется. Я бы сказал, что вы можете реализовать его, как хотите, или, возможно, совсем нет.

Ответ 5

Правильный ответ - это тот, который был намечен другими ответами, но не совсем явным образом: эффект прибавления аккумулятора undefined по спецификации языка и оставлен как выбор реализации.

Ответ 6

Собственно, я ошибаюсь.

Аккумулятор - это регистр, в который хранится результат последнего вычисления. В Intel x86 любой регистр может быть указан как накопитель, за исключением MUL.

Источник:

http://en.wikipedia.org/wiki/Accumulator_ (вычисление)

Я был очень удивлен, когда впервые посетил третий сайт в вашем вопросе, чтобы узнать, что мой одноклассник написал версию OCaml на нижней части страницы.