Куайн (програмування)
Матеріал з Seo Wiki - Пошукова Оптимізація та Програмування
Куайн, квайн(англ.quine) - Комп'ютерна програма (приватний випадок метапрограмування), яка видає на виході точну копію свого вихідного тексту. Програмісти іноді для забави займаються розробкою максимально коротких куайнів різними мовами програмування.
Слід зазначити, що програми, які використовують зовнішні дані, куайни не вважаються; тобто виключається прочитання тексту програми з файлу, введення його з клавіатури тощо. Крім того, не вважається куайном «програма», яка не містить взагалі жодного коду (вироджений випадок). У книзі «Етюди для програмістів» сформульовано суворішу умову: програма не повинна користуватися трюками, що дозволяють отримати доступ до свого вихідного коду, що зберігається в пам'яті завантажувача або інтерпретатора. Тому куайн на бейсику 10 LIST – не зовсім чесний.
Термін отримав назву від імені американського логіка та філософа Уїлларда Ван Ормана Куайна (англ.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-х викладачем і дослідником Хаміш Дево (англ.HamishDewar).
Ось вихідний текст цієї програми:
У випадку при написанні куайна програма поділяється на дві частини: (а) код, відповідальний виведення результату, і (б) вихідний текст першої частини (коду). Програма використовує другу частину для виведення першої та якийсь спеціальний прийом для виведення другої частини. Є безліч способів організувати дані у вихідному тексті програми, але звичайна ознака другої частини куайна (блоку даних) - відображення в ньому будь-якої частини всієї програми.
Delphi/Паскаль
(перенесення рядків додано для читабельності)
(перенесення рядків після #include додано для читабельності)
Це класичний Куайн на Сі, що повністю відповідає ANSI Сі. Можна зробити робочий варіант коротшим, але він буде не таким портованим.
(Вільний формат запису коду (стандарт ФОРТРАН-90), переноси рядків додані для читабельності)
Не цілком коректне рішення, оскільки в ньому немає операцій безпосереднього виведення програми.