最近在 Clojure 中完成了一个实现(随后),我可以肯定地说,累加器绝对是成功实现 HQ9+ 的核心。没有它,就会留下 HQ9 的实现,虽然它本身无疑值得,但显然是不同的,因此没有累加器的 HQ9+ 以及递增它的指令因此不会是 HQ9+ 的实现。
(编者注:Bob 今天已经服药了,但他们还没有完全发挥作用;因此,可能需要进一步解释。我相信 Bob 想说的是 HQ9+ 本身作为一种编程语言是无用的;但是, 在学习如何用新语言成功实现某些东西的背景下,实现它实际上很有用。好吧,我现在就安静地蜷缩在 Bob 的大脑后面,让他重新开始做......当我不介意商店时,无论他做什么......)。
无论如何... 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+ 被写成只接受大写字母。如果需要,我已做好充分准备建立一个宗教,暂定名为 CONVOCATION OF THE HOLY CAPS LOCK,它将宣布使用大写字母由 FRED 指挥(我们的上帝——Fred——这似乎是一个友好的名字上帝,不是吗?),并且会认为使用小写字母是诅咒......我的意思是,成为诅咒!
分享和享受。