Quine
This page is the answer to the task Quine in the Rosetta Code.
Contents
Description (from Rosetta Code)
A Quine is a self-referential program that can, without any external access, output its own source.
It is named after the philosopher and logician who studied self-reference and quoting in natural language, as for example in the paradox "'Yields falsehood when preceded by its quotation' yields falsehood when preceded by its quotation." "Source" has one of two meanings. It can refer to the text-based program source. For languages in which program source is represented as a data structure, "source" may refer to the data structure: quines in these languages fall into two categories: programs which print a textual representation of themselves, or expressions which evaluate to a data structure which is equivalent to that expression. The usual way to code a Quine works similarly to this paradox: The program consists of two identical parts, once as plain code and once quoted in some way (for example, as a character string, or a literal data structure). The plain code then accesses the quoted code and prints it out twice, once unquoted and once with the proper quotation marks added. Often, the plain code and the quoted code have to be nested. Task Write a program that outputs its own source code in this way. If the language allows it, you may add a variant that accesses the code directly. You are not allowed to read any external files with the source code. The program should also contain some sort of self-reference, so constant expressions which return their own value which some top-level interpreter will print out. Empty programs producing no output are not allowed. There are several difficulties that one runs into when writing a quine, mostly dealing with quoting:
Next to the Quines presented here, many other versions can be found on the Quine page. |
Preamble. Symbolic computation
Symbolic computation works different than traditional one. In symbolic computation, the program becomes gradually in its output, by the application of rewriting rules.
Example 1. The simplest program. A Null expression
Please note that it is not an empty program (which is disallowed). It is just a one expression program: the Null expression, which has no rewriting rules.
Example 2. A Program with non-reducible expressions
According to symbolic computation, if a program contains only non-reducible expressions (expression with no rewriting rules), then it will no be transformed to anything else, and it will be its own output.
Example 3. Any program (under specific circumstances)
Under Fōrmulæ, Rewriting rules can be disabled/enabled manually. If every rewriting rule were disabled, then any program would be its own output.