Куайн (програмування) - це

Куайн, квайн(англ.quine) - Комп'ютерна програма, яка видає на виході точну копію свого вихідного тексту.

Слід зазначити, що програми, які використовують зовнішні дані, куайни не вважаються; тобто виключається прочитання тексту програми з файлу, введення його з клавіатури тощо. Крім того, не вважається куайном «програма», яка не містить взагалі жодного коду (вироджений випадок). У книзі «Етюди для програмістів» Чарльза Уезерелла сформульовано суворішу умову: програма не повинна користуватися трюками, що дозволяють отримати доступ до свого вихідного коду, що зберігається в пам'яті завантажувача або інтерпретатора. Тому куайн на бейсику 10 LIST – не зовсім чесний, також як SOURCE TYPE мовою Форт.

Термін отримав назву від імені американського логіка та філософа Уїлларда Ван Ормана Куайна (англ.Willard Van Orman Quine) (1908—2000), який займався поглибленим вивченням непрямої самозгадки (англ.indirect self-reference).

Зміст

Куайн існує в будь-якій мові програмування, що має можливість виводити довільний рядок тексту, що обчислюється. Ідея куайнів була вперше описана Полом Братлі (англ.Bratley, Paul ) і Жаном Мілло (англ.Millo, Jean) в «Computer Recreations; Self-Reproducing Automata», Software - Practice & Experience, випуск 2 (1972), с.397-400. Братлі зацікавився саморепродукуванням програм після знайомства з першою такою програмою, написаною мовою програмування Atlas Autocode в Единбурзі в 1960-х викладачем та дослідником Хаміш Дево (англ.Hamish Dewar).

Ось вихідний текст цієї програми:

У разі написання куайна на Сі/Сі++ програма поділяється на дві частини:(а)вихідний текст першої частини (коду) та(б)код, відповідальний за виведення результату. Програма використовує другу частину для виведення першої та якийсь спеціальний прийом для виведення другої частини. Є безліч способів організувати дані у вихідному тексті програми, але звичайна ознака першої частини куайна (блоку даних) - відображення в ньому будь-якої частини всієї програми.

Наведену програму складено інженером Каунаського політехнічного інституту Вітаутасом Валайтісом.

Delphi/Паскаль

(перенесення рядка додано для читабельності)

Це класичний Куайн на Сі, що повністю відповідає ANSI. Можна зробити робочий варіант коротшим, але він порушуватиме стандарти, і отже буде погано переносимий.

Наприклад наступний варіант, покладається на порядок обчислення аргументів у функції (за стандартом невизначений), а також використовує main() без значення, що повертається:

Або такий із циклами

хтось може заперечити, що це не Куайн, але він виводить сам себе.

(Вільний формат запису коду (стандарт ФОРТРАН-90), переноси рядків додані для читабельності)

і ще один витончений приклад із книги Let Over Lambda:

Ще один варіант для Python:

(перенесення рядків додано для читабельності)

Також приклад без eval:

Версія з printf (з версії Java 5.0): (рядок str розділена для читабельності)

  • HQ9+ - езотерична мова програмування; дозволяє за допомогою однієї команди вивести свій код, що виконується

Примітки

  • Проставивши виноски, внести точніші вказівки на джерела.

Wikimedia Foundation. 2010 .

Дивитись що таке "Куайн (програмування)" в інших словниках:

Куїн — Квін: Еллері Квін (або Еллері Квін)псевдонім кузенів Даніеля Натана та Емануеля Леповські, а також персонаж їх творів. З дозволу Натана та Леповського, псевдонім неодноразово використовувався й іншими письменниками. Куайн (програмування)… … Вікіпедія

Лісп — Семантика: мультипарадигмальний: об'єктно орієнтоване, функціональне, процедурне програмування З'явився в: 1958 Автор(и): Джон Маккарті Типізація даних … Вікіпедія

Скотт, Дана Стюарт - У Вікіпедії є статті про інших людей з прізвищем Скотт. Дана Скотт Dana Stewart Scott Дата народження … Вікіпедія

Lisp — Лісп Семантика: мультипарадигмальний: об'єктно орієнтоване, функціональне, процедурне програмування З'явився в: 1958 р. Автор(и): Джон Маккарті Типізація даних: сильна, динамічна … Вікіпедія

ЛІСП — Семантика: мультипарадигмальний: об'єктно орієнтоване, функціональне, процедурне програмування З'явився в: 1958 р. Автор(и): Джон Маккарті Типізація даних: сильна, динамічна Діалекти: Common … Вікіпедія

Скотт, Дана - У Вікіпедії є статті про інших людей з таким прізвищем, див. Скотт. Дана Скотт Dana Stewart Scott … Вікіпедія