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

Я просто читал немного о языке программирования HQ9+:

и это говорит мне что-то о так называемом «аккумуляторе», который можно увеличить, но не получить к нему доступ. Кроме того, использование + не влияет на результат, так что ввод

H+H

дает результат:

Hello World
Hello World

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


person Community    schedule 04.05.2010    source источник


Ответы (6)


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

person Donal Fellows    schedule 04.05.2010
comment
@Konig - судя по описанию языка, он кажется довольно бесполезным, и вы, вероятно, можете делать с + все, что хотите, если это не влияет ни на что другое. Я бы просто проигнорировал это в реализации, поскольку увеличение чего-то, к чему вы не можете получить доступ, не имеет смысла. - person NG.; 04.05.2010

Это шутка.

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

person Jörg W Mittag    schedule 04.05.2010

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

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

person Bob Jarvis - Reinstate Monica    schedule 25.01.2014
comment
Бог может отвергать строчные буквы, но весь пример кода, приведенный в подробной спецификации, использует строчные буквы. Нечувствительность к регистру является очевидным намерением. (hq9+ действительно является языком с самой плачевной реализацией. Разработчики языка принимают это к сведению и предоставляют стандартный набор тестов вместе с вашей спецификацией.) - person Julian Fondren; 28.12.2017

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

person Dinah    schedule 04.05.2010
comment
Аккумулятор доступен через метапрограммы. Поэтому необходимо следовать спецификациям. - person Mikael Lindlöf; 11.05.2014
comment
Как метапрограмма может получить доступ к аккумулятору? Метапрограмма может сделать это для конкретной реализации, реализующей аккумулятор определенным образом. Однако в отсутствие четкой спецификации языка, описывающей, что делает аккумулятор, поведение любой такой метапрограммы не будет четко определено. - person aestrivex; 28.05.2014
comment
Чтобы привести этот аргумент, вам придется создать новый язык (возможно, с названием HQ9+14STD или что-то в этом роде) с точной спецификацией поведения аккумулятора. - person aestrivex; 28.05.2014

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

person aestrivex    schedule 22.01.2014

На самом деле я ошибаюсь.

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

Источник:

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

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

(обновленная ссылка на сайт)

person Mark C    schedule 05.10.2010