Domanda

Stavo leggendo un po 'la HQ9 + linguaggio di programmazione ( http://esolangs.org/wiki/HQ9 , http://en.wikipedia.org/wiki/HQ9%2B e http://www.cliff.biffle.org/esoterica/hq9plus.html), e mi dice qualcosa su un cosiddetto 'accumulatore' che può essere incrementato, ma non è possibile accedere. Inoltre, utilizzando il + non manipola il risultato:

codice

H+H

Risultati

Hello World
Hello World

Qualcuno mi può spiegare come funziona, ciò che fa e anche se non fa alcun senso? Grazie

È stato utile?

Soluzione

Dopo aver scritto un implementazione , credo di poter dire senza dubbio che fa alcun senso. vi consiglio di non ti preoccupare; si tratta di un linguaggio molto stupida, dopo tutto.

Altri suggerimenti

E 'uno scherzo.

C'è anche un'estensione orientata agli oggetti di HQ9 +, chiamato HQ9 ++. Ha un nuovo ++ comando che un'istanza di un oggetto, e, per ragioni di compatibilità col passato, incrementa anche registro accumulatore due volte. E ancora, dal momento che non v'è alcun modo per memorizzare, recuperare, accedere, manipolare, stampare o influenzare altrimenti un oggetto, è completamente inutile.

Dopo aver recentemente completato un'implementazione in Clojure (che segue) posso tranquillamente dire che l'accumulatore è assolutamente centrale per una corretta attuazione del HQ9 +. Senza di essa si sarebbe lasciato con un'implementazione di HQ9 che, pur senza dubbio degna di per sé, è chiaramente diversa, e quindi HQ9 + senza un accumulatore, e le istruzioni per incrementarlo, sarebbe in tal modo non essere un'implementazione di HQ9 +.

( Nota del redattore: Bob ha preso le sue medicine oggi, ma non hanno abbastanza calci ancora, quindi, ulteriori spiegazioni è forse necessaria Quello che credo Bob sta cercando di dire è che HQ9 + è inutile come programmazione. lingua, di per sé, tuttavia, attuando in realtà può essere utile nel contesto di imparare come implementare qualcosa con successo in un nuovo linguaggio OK, mi limiterò a andare a rannicchiarsi tranquillamente nella parte posteriore del cervello di Bob ora e lasciarlo andare. torna a fare ... qualsiasi cosa che fa quando non sto badando il negozio ... ).

In ogni modo ... implementazione in Clojure segue:

(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))))

Si noti che questa implementazione accetta solo comandi inviati alla funzione come parametri; che non legge un file per il suo programma. Ciò può essere rimediato nelle versioni future. Anche notare che si tratta di un'implementazione "rigorosa" del linguaggio - la pagina originale (al Wayback Machine ) mostra chiaramente che dovrebbe essere accettato solo MAIUSCOLO 'di H e' Q, anche se implica che le lettere minuscole può anche essere accettato. Dal momento che parte del punto di attuare qualsiasi linguaggio di programmazione è quello di rispettare rigorosamente le specifiche come scritto questa versione di HQ9 + viene scritto solo accettare le lettere maiuscole. Dovrebbe l'insorgere bisogno Sono pienamente preparato per fondare una religione, provvisoriamente chiamato la convocazione del blocco maiuscole Santo, che dichiara l'utilizzo di maiuscole per essere comandato da FRED (il nostro dio - Fred - sembra come un amichevole nome per un dio, non è vero?), e si ritengono l'uso di lettere minuscole per essere un anatema ... Voglio dire, un anatema!

Condividere e godere.

Si incrementa qualcosa non accessibile, non spec-definiti, e apparentemente non davvero anche usato. Direi che è possibile implementare che comunque lo si voglia o forse non a tutti.

La risposta giusta è uno che è stato accennato da parte delle altre risposte, ma non del tutto esplicitamente dichiarato:. L'effetto di incrementare l'accumulatore non è definito dalla specifica del linguaggio e sinistra come una scelta di realizzazione

In realtà, mi sbaglio.

L'accumulatore è il registro a cui è memorizzato il risultato dell'ultimo calcolo. In un processore Intel x86, qualsiasi registro può essere specificato come l'accumulatore, tranne che nel caso di MUL.

Fonte:

http://en.wikipedia.org/wiki/Accumulator_(computing)

Sono stato molto sorpreso la prima volta che ho visitato il terzo sito nella vostra domanda per scoprire un mio compagno di scuola ha scritto l'attuazione OCaml in fondo alla pagina.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top