Quine

From APL Wiki
Jump to navigation Jump to search

A quine is a program which takes no input and produces a copy of its own source code as its only output.

In APL, a quine is listed in the FinnAPL idiom library as "an expression giving itself":

      1⌽22⍴11⍴'''1⌽22⍴11⍴'''

In 2019, Nick Nikolov proposed to shorten it using the commute operator:[1]

      1⌽,⍨9⍴'''1⌽,⍨9⍴'''

Explanation:[2]

  • '''1⌽,⍨9⍴''' the characters '1⌽,⍨9⍴'
  • 9⍴ reshape to shape 9, resulting in '1⌽,⍨9⍴''
  • ,⍨ concatenate with itself, resulting in '1⌽,⍨9⍴'''1⌽,⍨9⍴''
  • 1⌽ rotate one character to the left, getting the characters: 1⌽,⍨9⍴'''1⌽,⍨9⍴'''

Further Entries

Replicate

In May 2022, APL Farm user OsKaR31415 shared the following:[3]

      '{∊⍵⍺⍵⍺,4/⍵}'{∊⍵⍺⍵⍺,4/⍵}''''

Explanation

In this code, the main function is {∊⍵⍺⍵⍺,4/⍵} with the right argument being single quote literal (spelled with four quotes, '''', because single quotes delimit APL character literals, and quotes inside such must be doubled), and the left argument being the character vector representation of the function ('{∊⍵⍺⍵⍺,4/⍵}').

The idea behind this quine is that the only thing you need to have a string containing the original code is to reproduce this structure: [quote] [function] [quote] [function] [quote] [quote] [quote] [quote]. This is precisely what the function does. Given the representation of a function (itself in this case), and character (here, the quote), it produces the structure ⍵ ⍺ ⍵ ⍺ ⍵ ⍵ ⍵ ⍵. A more explicit version would be '{⍵,⍺,⍵,⍺,⍵,⍵,⍵,⍵}'{⍵,⍺,⍵,⍺,⍵,⍵,⍵,⍵}'''' which simply concatenates together the required parts. The original quine is very similar, only using the shorter 4/⍵ to produce the 4 occurrences of , and golfs away the spaces, instead opting for Enlist () to flatten the intermediary nested array.

Based on code point of quote

In Jun 2022, Jay Foad shared the following:[4]

      {,⍨⍵,⎕UCS 39}'{,⍨⍵,⎕UCS 39}'

Explanation

In this code, the main function is {,⍨⍵,⎕UCS 39} with the argument being the function itself which avoids duplication of quotes by generating the quote from its Universal Character Set code point (⎕UCS).

The idea behind this quine is that the only thing you need to have a string containing the original code is to reproduce this structure: [function] [quote] [function] [quote]. This is precisely what the function does. Given the representation of a function (itself in this case), it generates a quote and concatenates it on the right of the function definition, giving [function] [quote]. It then uses self-concatenation (,⍨) to repeat the two parts into the required four.

External links