Ответ 1
Написав реализацию, я думаю, что могу без всяких сомнений сказать, что это не имеет никакого смысла. Я советую вам не беспокоиться об этом; это очень глупый язык.
Я просто немного читал о языке программирования 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 + бесполезен как язык программирования, за 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 (наш бог - Фред - кажется, что такой дружелюбное имя для бога, не так ли?), и будет считать, что буквы в нижнем регистре являются анафемой... Я ЗНАЮ, ЧТОБЫ БЫТЬ АНАТЕМЕЙ!
Поделитесь и наслаждайтесь.
Он увеличивает что-то недоступное, а не специфицированное и, по-видимому, даже не используется. Я бы сказал, что вы можете реализовать его, как хотите, или, возможно, совсем нет.
Правильный ответ - это тот, который был намечен другими ответами, но не совсем явным образом: эффект прибавления аккумулятора undefined по спецификации языка и оставлен как выбор реализации.
Собственно, я ошибаюсь.
Аккумулятор - это регистр, в который хранится результат последнего вычисления. В Intel x86 любой регистр может быть указан как накопитель, за исключением MUL.
Источник:
http://en.wikipedia.org/wiki/Accumulator_ (вычисление)
Я был очень удивлен, когда впервые посетил третий сайт в вашем вопросе, чтобы узнать, что мой одноклассник написал версию OCaml на нижней части страницы.