Комментарии 7
Только это не квайн, а мультиквайн. Курица и яйцо. Игрушка «курица» кроме прочего имеет функцию выдачи исходника яйца, а игрушка «яйцо» выдаёт исходник курицы.
Просто и красиво, как по мне. Метод, как подложить магическую строку в саму себя, вообще в восторг привёл, хотя, казалось бы...
В принципе, если позаморачиваться, можно сделать квайногенератор — функцию, которая превращает в квайн любую другую чистую функцию и позволяет хранить произвольное состояние, к которому вышеупомянутая чистая функция сможет обращаться.
Ага, я подобное делал для Звездных войн в исходном коде: ввел специальне маркеры-комментарии, для разметки данных, кода, параметров (у вас — состояние), а также маркера печати (куда выводить код всего квайна в финальной генерации). Более того, исходный текст может быть написан привычным способом, т.к. там используется минификатор для сокращения идентификаторов, удаления лишних скобок, комментариев и других укорачиващивающих вещей.
Это позволило разрабатывать разные квайны на C#, среди которых квайн-палиндром, часы, игра "Змейка". В теории такой подход можно обобщить на другие языки и попробовать, например, писать квайновые эстафеты.
В репозитории всего этого безобразия Freaky-Sources даже IDE есть :)
квайн, в принципе, может нести произвольную полезную нагрузку. То есть — делать ещё что угодно помимо своей основной функции.
Ну еще язык HQ9+ кроме вывода текста программы (одной инструкцией) позволяет вывести 99-бутылочный тест (другой инструкцией), а также «Hello world» (третьей).
Конечно, не факт, что это можно назвать полезным… Тем более четвертую инструкцию — инкремент внутренней переменной (без возможности вывода).
Пятничный JS: квайн, который играет в крестики-нолики