16

HQ9+ プログラミング言語について少し読んでみました。

そして、インクリメントはできるがアクセスはできない、いわゆる「アキュムレータ」について何かを教えてくれます。また、 using+は結果を操作しないため、入力は

H+H

結果を与える:

Hello World
Hello World

これがどのように機能するか、何をするのか、そしてそれが意味をなすかどうかを誰か説明できますか? ありがとう。

4

6 に答える 6

14

それは冗談だ。

HQ9++と呼ばれるHQ9+のオブジェクト指向拡張もあります。++オブジェクトをインスタンス化する新しいコマンドがあり、下位互換性のために、アキュムレータレジスタも2回インクリメントします。また、オブジェクトを保存、取得、アクセス、操作、印刷、またはその他の方法でオブジェクトに影響を与える方法がないため、まったく役に立ちません。

于 2010-05-04T15:39:34.043 に答える
14

最近、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 と名付けられました。これは、大文字の使用をフレッド (私たちの神 - フレッド -フレンドリーな名前のようです。神にとってはそうではありませんか?)、そして小文字の使用はアナテマであると見なされます...つまり、アナテマになることです!

共有してお楽しみください。

于 2014-01-25T17:56:48.310 に答える
14

実装を書いたので、それがまったく意味をなさないことは疑いなく言えると思います。心配しないことをお勧めします。結局のところ、それは非常にばかげた言語です。

于 2010-05-04T15:04:27.487 に答える
6

アクセスできず、仕様で定義されておらず、明らかに実際には使用されていないものをインクリメントします。必要に応じて実装できるか、まったく実装できない可能性があります。

于 2010-05-04T15:16:20.143 に答える
5

正しい答えは、他の答えによって示唆されているが、明確に述べられていないものです。アキュムレータをインクリメントする効果は、言語仕様では定義されておらず、実装の選択として残されています。

于 2014-01-22T18:35:24.030 に答える
3

実は、私は間違っています。

アキュムレータは、最後の計算の結果が格納されるレジスタです。Intel x86 では、MUL の場合を除き、任意のレジスタをアキュムレータとして指定できます。

ソース:

http://en.wikipedia.org/wiki/Accumulator_(コンピューティング)

あなたの質問の 3 番目のサイトを初めて訪れたとき、同級生がページの下部に OCaml の実装を書いていることを知り、非常に驚​​きました。

(サイトリンクを更新しました)

于 2010-10-05T08:57:39.597 に答える