Что такое quines? Какая-либо определенная цель иметь их? [закрытый]

Да Вы должны.

Преимущества (что касается любого внешнего ключа):

  • Гарантирует, что parent_id ссылки, реальная строка в таблице
  • Предотвращает случайное удаление родителя, который имеет детей, или гарантирует, что удалить каскады для удаления дочерних элементов также
  • Предоставляют информацию, которую оптимизатор может использовать

, я не могу думать ни о каких реальных недостатках.

18
задан Arnkrishn 10 July 2009 в 20:54
поделиться

9 ответов

Quines бесполезны в практическом смысле, но они являются отличным упражнением, которое поможет вам узнать больше о языке.

Вот очень краткий пример на python:

a='a=%r;print a%%a';print a%a
28
ответ дан 30 November 2019 в 05:44
поделиться

Я не могу представить никаких данных, чтобы сказать, что написание пары куин расширило мой кругозор или сделало меня лучшим программистом. Но это весело, по крайней мере, первые пару раз. Во всяком случае, вы спросили, как его написать. Я могу указать вам на некоторые хорошо написанные ссылки:

У Крейга Каплана есть аккуратная статья, в которой описывается, как на самом деле производить quines:

  • Поиск самодокументирующегося кода
    • В этом отчете исследуется проблема написания самодокументируемого программа документирования: программа, которая при запуске производит сама себя в качестве вывода. Проблема рассматривается с точки зрения самодокументирования, свойства, которым должна обладать самодокументирующая программа. Отчет исходит из ранних программ, которые не работают правильно, через последовательно сложные программы, которые приближаются к решению, работающим самодокументирующим программам. Затем он немного отступает и показывает, как некоторые программы могут показаться обманчивыми и по-прежнему соответствовать определению самодокументирующейся программы, предлагая улучшения этого определения. На каждом этапе в отчете рассматривается, как данные программы демонстрируют тонкую взаимосвязь между компьютерным программированием и самореференцией.

Вы также можете найти интересное чтение Дэвида Мадора «Куинз (самовоспроизводящиеся программы)» .

Наконец, если вы хотите увидеть реализации, посетите страницу Quine , где вы можете найти quine на разных языках и другие связанные материалы.

3
ответ дан 30 November 2019 в 05:44
поделиться

Quine - это компьютерная программа, которая производит копию своего собственного исходного кода в качестве единственного вывода.

Я еще не видел практического применения для одного, но уверен, что есть один где-то там.


Пример Python ( здесь )

print (lambda s:s+`s`+')')("print (lambda s:s+`s`+')')(")

Пример C ( здесь

#include <stdio.h>

int main(int argc, char** argv)
{
/* This macro B will expand to its argument, followed by a printf
 command that prints the macro invocation as a literal string */
#define B(x) x; printf("  B(" #x ")\n");

/* This macro A will expand to a printf command that prints the
 macro invocation, followed by the macro argument itself. */
#define A(x) printf("  A(" #x ")\n"); x;

/* Now we call B on the text of the program
 up to this point. It will execute the command, and then cause
 itself to be printed. */
  B(printf("#include <stdio.h>\n\nint main(int argc, char** argv)\n{\n/*
    This macro B will expand to its argument, followed by a printf\n
    command that prints the macro invocation as a literal string
    */\n#define B(x) x; printf(\"  B(\" #x \")\\n\");\n\n/* This macro
    A will expand to a printf command that prints the\n
    macro invocation, followed by the macro argument itself. */\n#define A(x)
    printf(\"  A(\" #x \")\\n\"); x;\n\n/* Now we call B on the text
    of the program\n up to this point. It will execute the command,
    and then cause\n itself to be printed. */\n"))
  A(printf("/* Lastly, we call A on a command to print the remainder
    of the program;\n it will cause itself to be printed, and then
    execute the command. */\n}\n"))
/* Lastly, we call A on a command to print the remainder of the program;
 it will cause itself to be printed, and then execute the command. */
}
10
ответ дан 30 November 2019 в 05:44
поделиться

Как минимум, quines - это программы, которые производят собственный исходный код в качестве вывода. Они являются необходимым шагом в построении доказательства Гёделя о неполноте .

Является ли это практическим использованием, я не могу комментировать

.
19
ответ дан 30 November 2019 в 05:44
поделиться

Для чего используются колючки? Упражнения по программированию и вирусы.

Вирусу нужно как-то размножаться - и один из способов - превратить его в кайну. Предположим, что гипотетическая антивирусная программа будет отмечать любой процесс, который считывает собственный двоичный файл в память (чтобы передать его предполагаемой жертве); способ обойти это, чтобы он выводил сам.

Имейте в виду, что quine в машинном коде не требует компиляции.

2
ответ дан 30 November 2019 в 05:44
поделиться

Вот один в Python (это некрасиво; я просто написал это, чтобы попробовать). Тогда даже не знал, что это называлось quine.

def e(s): print s[:42]+s[42:].replace('#','"'); print 'e("""'+s+'""")'
e("""def e(s): print s[:42]+s[42:].replace('#','"'); print 'e(###'+s+'###)'""")

Да, и отвечу на ваш другой вопрос: Quines совершенно бесполезны.

1
ответ дан 30 November 2019 в 05:44
поделиться

Это мой любимый пример C

char*p="char*p=%c%s%c;main(){printf(p,34,p,34);}";main(){printf(p,34,p,34);}

Две вещи, которые я извлек из него:

  1. Пробел не требуется, но помогает читабельности
  2. Функция prinftf действительно мощная
5
ответ дан 30 November 2019 в 05:44
поделиться

Как объясняли другие, quines - это программы, которые воспроизводят точные копии самих себя.

Что касается приложений, если вы думаете, что ДНК кодирует логику интерпретировать и воспроизводить себя - ответ довольно прост, без концепции quines мы бы не стали ' быть здесь, и мы никогда не сможем создать искусственную (самовоспроизводящуюся) жизнь.

8
ответ дан 30 November 2019 в 05:44
поделиться

Это интересный квин на с++: http://npcomplete.weebly.com/1/post/2010/02/self-reproducing-c-program-quine.html

Куины предназначены для развлечения. Они не имеют практического применения, насколько я знаю.

0
ответ дан 30 November 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: