Изменения

Перейти к: навигация, поиск

Квайны

461 байт убрано, 15:04, 6 января 2015
Нет описания правки
{{Определение
|definition='''Квайном''' (англ. <i>''quine</i>'')<ref name=quineName/> называется программа, которая выводит свой исходный код. При этом, программа не должна использовать внешние данные (например, читать файл со своим исходным кодом)<ref name=quineExists/>.
}}
Квайн состоит из двух сегментов: <b>кода</b> и <b>данных</b>. Данные представляют собой текстовую версию кода, и, как правило, получаются из кода простым добавлением обрамляющих кавычек. Код, в свою очередь, сначала использует данные, чтобы вывести код(содержащийся в них), а затем, просто выводит данные.
Формально общий принцип написания квайнов содержит доказательство содержится в доказательстве [[Теорема о рекурсии|теоремы о рекурсии]]. Далее будет рассмотрено понятие мульти-квайна.
==Связанные определения=====Интроны===
{{Определение
|definition='''Интроном''' (англ. ''intron'') называется часть сегмента данных, которая не используется для вывода кода, но сохраняющаяся в процессе саморепликации квайна.
}}
Название пришло из биологии, где интронами называются части ДНК, не участвующие в синтезе протеинов.
Интроны активно используются при создании мульти-квайнов.
===Мульти-квайны===
{{Определение
|definition='''Би-квайном''' (англ. ''bi-quine'') называется программа, которая делает одно из двух:
*при обычном запуске она выводит свой исходный код,
*при запуске с особым аргументом она выводит исходный код своего "брата" на другом языке программирования.
}}
{{Определение
|definition='''<tex>R</tex>-квайном''' (англ. <tex>R</tex>-''quine'') называется программа, способная вывести исходный код <tex>R-1</tex> программ на других языках программирования в зависимости от переданного ей аргумента, а так же свой исходный код при вызове без аргументов.
}}
Заметим, что требование, чтобы программы были на разных языках программирования важно, т.к. иначе все программы смогут иметь один и тот же код.
}}
===Принцип написания===
Будем следовать доказательству и напишем мульти-квайн для двух языков. Далее покажем, как добавить новый язык.
# напишем для каждого языка "полу-квайн": <tex>P(p,arg):
\right.
</tex>
 
== Примечания ==
<references>
<ref name=quineName>Название "квайн" было предложено [http://ru.wikipedia.org/wiki/Хофштадтер,_Дуглас Дугласом Хофштадтером], в его известной книге "Гёдель, Эшер, Бах: Эта бесконечная гирлянда" в честь американского логика и философа [http://ru.wikipedia.org/wiki/Куайн,_Уиллард_Ван_Орман Уилларда Ван Ормана Квайна], который углублённо изучал явление [http://en.wikipedia.org/wiki/Indirect_self-reference косвенного самоупоминания].</ref>
</references>
== Источники информации ==
* [http://habrahabr.ru/post/188378/ Хабрахабр - Мультиязыковые квайны]
* [http://habrahabr.ru/post/128191/ Хабрахабр - Как писать квайны]
 
== Примечания ==
<references>
<ref name=quineName>Название "квайн" было предложено [http://ru.wikipedia.org/wiki/Хофштадтер,_Дуглас Дугласом Хофштадтером], в его известной книге "Гёдель, Эшер, Бах: Эта бесконечная гирлянда" в честь американского логика и философа [http://ru.wikipedia.org/wiki/Куайн,_Уиллард_Ван_Орман Уилларда Ван Ормана Квайна], который углублённо изучал явление [http://en.wikipedia.org/wiki/Indirect_self-reference косвенного самоупоминания].</ref>
<ref name=quineExists>Из [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8#.D0.A2.D0.B5.D0.BE.D1.80.D0.B5.D0.BC.D0.B0_.D0.BE_.D1.80.D0.B5.D0.BA.D1.83.D1.80.D1.81.D0.B8.D0.B8 теоремы Клини о рекурсии] очевидно следует, что квайн можно написать на любом Тьюринг-полном языке.</ref>
</references>
 
[[Категория: Теория формальных языков]]
[[Категория: Теория вычислимости]]
262
правки

Навигация