最近、Clojure での実装を完了したので (後述)、アキュムレータは HQ9+ の実装を成功させるための絶対的な中心であると断言できます。それがなければ、HQ9 の実装が残されますが、それ自体は価値があることは間違いありませんが、明らかに異なるため、アキュムレータのない HQ9+ とそれをインクリメントする命令は、HQ9+ の実装ではありません。
(編集者注: ボブは今日薬を服用しましたが、まだ十分に効果を発揮していません。したがって、おそらくさらなる説明が必要です。私がボブが言おうとしているのは、HQ9+ はプログラミング言語自体としては役に立たないということです。ただし、 , それを実装することは、新しい言語で何かをうまく実装する方法を学ぶという文脈で実際に役立つ.私が店のことを気にしていないとき、彼が何をしようとも... )。
とにかく... 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 と名付けられました。これは、大文字の使用をフレッド (私たちの神 - フレッド -フレンドリーな名前のようです。神にとってはそうではありませんか?)、そして小文字の使用はアナテマであると見なされます...つまり、アナテマになることです!
共有してお楽しみください。