693
правки
Изменения
Квайны
,→Принцип написания
<table>
<tr>
<td><code><font size = "2em">
<tex>P_1(p,arg)</tex>:
'''if''' (arg == "print second!")
'''else'''
'''print'''(getSrc())
</font></code></td><td><code><font size = "2em">
<tex>P_2(p,arg)</tex>:
'''if''' (arg == "print first!")
'''else'''
'''print'''(getSrc())
</font></code></td>
</tr>
</table>
* подставим код второй программы в первую:
<tex>P_1(p,arg)</tex>:
'''if''' (arg == "print second!")
'''else'''
'''print'''(getSrc())
</font></code>
* применим [[Теорема о рекурсии|теорему о рекурсии]] и заменим параметр на исходный код программы:
<tex>P_1(arg)</tex>:
'''if''' (arg == "print second!")
'''else'''
'''print'''(getSrc())
</font></code>Вторая программа может быть получена запуском первой с нужным аргументом.
Теперь добавим третий язык:
* напишем для него "полу-квайнполуквайн", но уже с двумя параметрами и тремя возможными выводами:<code><font size = "2em">
<tex>P_3(p1,p2,arg)</tex>:
'''if''' (arg == "print first!")
'''else'''
'''print'''(getSrc())
</font></code>
* добавим параметр в два уже существующих квайна:
<table>
<tr>
<td><code><font size = "2em">
<tex>P_1(p,arg)</tex>:
'''if''' (arg == "print second!")
'''else'''
'''print'''(getSrc())
</font></code></td><td><code><font size = "2em">
<tex>P_2(p,arg)</tex>:
'''if''' (arg == "print first!")
'''else'''
'''print'''(getSrc())
</font></code></td>
</tr>
</table>
* подставим код первых двух в третью:
<tex>P_3(p1,p2,arg)</tex>:
'''if''' (arg == "print first!")
'''else'''
'''print'''(getSrc())
</font></code>
* применим [[Теорема о рекурсии|теорему о рекурсии]] и заменим оба параметра на исходный код программы:<code><font size = "2em">
<tex>P_3(arg)</tex>:
'''if''' (arg == "print first!")
'''else'''
'''print'''(getSrc())
</font></code>Две оставшиеся программы будут выглядеть аналогично, и смогут быть получены путём запуска третьей с каждым из возможных аргументов.
== Примечания ==