HQ9 +中的'累加器'是什么?

14 accumulator

我只是读一点关于HQ9 +编程语言(http://esolangs.org/wiki/HQ9, http://en.wikipedia.org/wiki/HQ9%2BHTTP://www.cliff.biffle. org/esoterica/hq9plus.html),它告诉我一些所谓的'累加器',它可以递增,但不能被访问.另外,使用+不会操纵结果:

H+H
Run Code Online (Sandbox Code Playgroud)

结果

Hello World
Hello World
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释我这是如何工作的,这是做什么的,如果它甚至有意义吗?谢谢

Jör*_*tag 13

这是个玩笑.

还有一个面向对象的HQ9 +扩展,称为HQ9 ++.它有一个++实例化对象的新命令,并且出于向后兼容的原因,还会将累加器寄存器递增两次.而且,由于无法存储,检索,访问,操纵,打印或以其他方式影响对象,因此它完全没用.


Don*_*ows 12

编写实现后,我想我可以毫无疑问地说它毫无意义.我建议你不要担心; 毕竟,这是一种非常愚蠢的语言.

  • @Konig - 基于对语言的描述似乎相当无用,只要它不影响其他任何东西,你就可以用+做任何你想做的事情.我会在实现中忽略它,因为增加一些你无法访问的东西是没有意义的. (2认同)

Bob*_*ica 10

最近在Clojure中完成了一个实现(接下来),我可以肯定地说,累加器对于成功实现HQ9 +来说是绝对重要的.如果没有它,人们将会得到一个HQ9的实现,虽然HQ9无疑是值得的,但它本身明显不同,因此没有累加器的HQ9 +以及递增它的指令因此不会是HQ9 +的实现.

(编者注:鲍勃今天已服用他的药物,但他们还没有完全开始;因此,可能需要进一步解释.我认为鲍勃试图说的是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))))
Run Code Online (Sandbox Code Playgroud)

请注意,此实现仅接受作为参数传递给函数的命令; 它不读取其程序的文件.这可能在将来的版本中得到补救.另请注意,这是该语言的"严格"实现 - 原始页面(在Wayback Machine上)清楚地表明只有大写字母'H'和'Q'应该被接受,尽管这意味着也可以接受小写字母.由于实现任何编程语言的部分要点是严格遵守规范,因此编写此版本的HQ9 +只能接受大写字母.如果有需要,我已经做好充分的准备,找到一个宗教,暂定名为"圣帽锁定",它将宣布使用大写由FRED命令(我们的上帝 - 弗雷德 - 它似乎是一个友好的名字对于一个上帝,不是吗?),并且会认为使用小写字母是诅咒......我的意思是,要成为安息日!

分享和享受.


Din*_*nah 5

它增加了一些不可访问的东西,而不是规范定义的东西,显然甚至没有使用过.我会说你可以实现它,无论你想要什么,也可能根本不想实现它.

  • 累加器可以通过元程序访问。因此有必要遵循规范。 (2认同)
  • 为了提出这个论点,您必须创建一种新语言(可能称为 HQ9+14STD 或类似的语言),并具有累加器行为的精确规范。 (2认同)

aes*_*vex 5

正确的答案是其他答案已经暗示但没有明确说明的答案:递增累加器的效果未由语言规范定义,而是作为实现的选择。