質問
私はHQ9+プログラミング言語について少し読んでいました( http://esolangs.org/wiki/hq9 , http://en.wikipedia.org/wiki/hq9%2b と http://www.cliff.biffle.org/esoterica/hq9plus.html )、そしてそれは私に、いわゆる「アキュムレータ」について何かを教えてくれます。また、を使用します +
結果を操作しません:
コード
H+H
結果
Hello World
Hello World
誰もがこれがどのように機能するか、これが何をするのか、それが理にかなっているなら、私に説明できますか?ありがとう
解決
書いた 実装, 、私はそれがまったく意味がないと疑いなく言うことができると思います。心配しないことをお勧めします。結局のところ、それは非常に愚かな言語です。
他のヒント
それは冗談だ。
HQ9 ++と呼ばれるHQ9+のオブジェクト指向の拡張もあります。新しいコマンドがあります ++
オブジェクトがインスタンス化され、後方互換性の理由で、アキュムレータレジスタが2回増加します。繰り返しになりますが、オブジェクトを保存、取得、アクセス、操作、印刷、またはその他の方法で影響を与える方法はないため、完全に役に立たないことです。
Clojureでの実装を最近完了した(次のとおり)。アキュムレータは、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))))
この実装は、パラメーターとして関数に渡されたコマンドのみを受け入れることに注意してください。プログラムのファイルは読みません。これは、将来のリリースで改善される可能性があります。また、これは言語の「厳格な」実装であることに注意してください - 元のページ( ウェイバックマシン)それは、それが受け入れられるべきであるが、それが受け入れられるべきであることを明確に示していますが 示す その低ケースの文字も受け入れられるかもしれません。プログラミング言語を実装するポイントの一部は、このバージョンのHQ9+が上記の文字のみを受け入れるように書かれているように、仕様を厳密に付着させることであるためです。必要に応じて、私は宗教を見つける準備が完全に準備されており、聖帽のロックの召集と暫定的に命じられた宗教を見つけました。 フレンドリー 神の名前、そうではありませんか?)、そして、低ケースの文字の使用は嫌悪感であるとみなします...つまり、嫌悪感であることを意味します!
共有して楽しんでください。
それは、アクセスしにくいものではなく、仕様定義ではなく、明らかに実際には使用されていないようです。私はあなたが望むか、そうでない場合でもそれを実装できると思います。
正しい答えは、他の答えによって示唆されたものですが、明示的に述べられていないものです。アキュムレータの増加の効果は、言語仕様によって未定義であり、実装の選択として残されます。
実際、私は間違っています。
アキュムレータは、最後の計算の結果が保存されるレジスタです。 Intel X86では、MULの場合を除き、任意のレジスタをアキュムレータとして指定することができます。
ソース:
http://en.wikipedia.org/wiki/accumulator_(Computing)
私が初めて訪れたとき、私は非常に驚きました 3番目のサイト あなたの質問の中で、私の学友がページの下部にOCAMLの実装を書いたことを見つけました。