Недавно завершив реализацию на 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