Обсуждение:Куайн (программирование): различия между версиями
Miks2012 (обсуждение | вклад) |
|||
(не показано 6 промежуточных версий 5 участников) | |||
Строка 1: | Строка 1: | ||
{{Статья проекта Информационные технологии|важность=|уровень=}} |
|||
== ... == |
== ... == |
||
"main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);} |
"main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);} |
||
Строка 34: | Строка 36: | ||
* языки, где исходный текст существенно используется (форт), |
* языки, где исходный текст существенно используется (форт), |
||
* языки, где исходную строку программы можно распечатать и получить желаемый результат (бейсик), но команда печати, по сути, внешняя, и иными программными способами исходник недостижим.--[[User:Myke|myke]] 07:59, 23 ноября 2009 (UTC) |
* языки, где исходную строку программы можно распечатать и получить желаемый результат (бейсик), но команда печати, по сути, внешняя, и иными программными способами исходник недостижим.--[[User:Myke|myke]] 07:59, 23 ноября 2009 (UTC) |
||
Подборка Куайнов для Форта [http://www.complang.tuwien.ac.at/forth/quines.html] |
Подборка Куайнов для Форта [http://www.complang.tuwien.ac.at/forth/quines.html] |
||
Самый простой SOURCE TYPE |
|||
слово SOURCE даст адрес и длину текста входной строки, а TYPE его напечатает |
|||
Посложнее : QUINE S" SEE QUINE" EVALUATE ; |
|||
но не везде слово SEE выведет куайн, слово EVALUATE исполнение кода в строке |
|||
[[Special:Contributions/88.206.58.212|88.206.58.212]] 02:23, 26 августа 2012 (UTC) |
|||
== BASIC == |
== BASIC == |
||
Строка 54: | Строка 61: | ||
Люди, имейте совесть! Сначала заменяете куайн на чтение исходного кода, а затем вычёркиваете вообще, дескать, это не куайн :) Ну хотя бы откатывайте правку, заменяющую куайн чтением исходного кода сразу, а не подтверждайте её. [[User:Alexsaa|Alexsaa]] 21:21, 24 июля 2011 (UTC) |
Люди, имейте совесть! Сначала заменяете куайн на чтение исходного кода, а затем вычёркиваете вообще, дескать, это не куайн :) Ну хотя бы откатывайте правку, заменяющую куайн чтением исходного кода сразу, а не подтверждайте её. [[User:Alexsaa|Alexsaa]] 21:21, 24 июля 2011 (UTC) |
||
Да, кстати perl'овых квайнов много http://www.nyx.net/~gthompso/self_perl.txt |
: Да, кстати perl'овых квайнов много http://www.nyx.net/~gthompso/self_perl.txt |
||
ну хоть такой бы показали: |
: ну хоть такой бы показали: |
||
$b='$b=%c%s%c;printf$b,39,$b,39;';printf$b,39,$b,39; |
: $b='$b=%c%s%c;printf$b,39,$b,39;';printf$b,39,$b,39; |
||
:: Не всё, что по той ссылке — полноценные куайны. Сомнительно, можно ли считать "честным куайном" то, что использует eval. И уж точно нельзя считать куайном то, что пользуется open 0. А свой куайн я возвращаю. Он достаточно перловый по духу и совершенно честный по сути. --[[User:Alexsaa|Alexsaa]] 22:25, 8 апреля 2013 (UTC) |
|||
== Нужны примеры кода == |
|||
Зачем-то откатили примеры куайнов на нескольких языках. Считаю, что в статье должны быть примеры кода. В английской википедии они есть [[У:Miks2012|Miks2012]] ([[ОУ:Miks2012|обс.]]) 19:43, 4 апреля 2023 (UTC) |
Текущая версия от 19:44, 4 апреля 2023
Эта статья тематически связана с вики-проектом «Информационные технологии», цель которого — создание и улучшение статей по темам, связанным с информационными технологиями. Вы можете её отредактировать, а также присоединиться к проекту, принять участие в его обсуждении и поработать над требуемыми статьями. |
...
[править код]"main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);} Следует заметить, что это программа несовместима со стандартом C99, а также с C++, поскольку эти стандарты требуют явного указания типа возвращаемого значения для функций (в данном случае — int main). Кроме того, даже при следовании устаревшему стандарту C89 использование функции printf без включения заголовочного файла (#include <stdio.h>), вообще говоря, приводит к неопределённому поведению."
Два замечания:
1) Вызов printf без включения <stdio.h> в общем случае не приводит к неопределенному поведению. Это так до тех пор, пока типы аргументов printf после продвижения типов аргументов (default argument promotion) совместимы (а на самом деле даже взаимозаменяемы, interchangeable) с типами соответствующих аргументов в определении этой функции. В данном примере это соблюдается.
2) Порядок вычисления аргументов в операции вызова функции не специфицирован. Это значит, в данном примере первым аргументом вызова printf может быть значение параметра "a" как до, так и после присваивания строкового литерала. То есть этот пример вызывает неопределенное поведение с точки зрения всех трех стандартов.
Вероятно, стоит подыскать другой пример. Может быть не такой эффектный, но все-таки корректный.
Ivan A. Kosarev 09:08, 25 августа 2008 (UTC)
Про Brainfuck убило...77.121.156.179 08:04, 15 октября 2008 (UTC)
BrainFuck
[править код]"19:06, 21 октября 2008 217.9.88.18 (обсуждение) (9349 байт) (удалил - →Brainfuck)"
--
и зачем???
89.109.25.150 15:53, 31 января 2009 (UTC)
Курьез
[править код]Возможно такое и на языке ассемблера. Только вот, по злой иронии судьбы ассемблерная реализация куина была расценена как вирус и попала в антивирусные базы под именем Virtool.DOS.Apiary. Ссылки: http://www.nf-team.org/drmad/zf/zf5/zf5_029.htm и http://www.securelist.com/ru/viruses/encyclopedia?virusid=55320 . Почему бы не добавить к статье, не забыв упомянуть пикантные обстоятельства? :)
Про FORTH
[править код]В отличие от прочих «курьёзов», форт здесь нужен принципиально, м.б. даже одним из 3 основных: есть
- языки, где входная строка (источник) не используется (в общем случае, недоступен) (С, фортран),
- языки, где исходный текст существенно используется (форт),
- языки, где исходную строку программы можно распечатать и получить желаемый результат (бейсик), но команда печати, по сути, внешняя, и иными программными способами исходник недостижим.--myke 07:59, 23 ноября 2009 (UTC)
Подборка Куайнов для Форта [1] Самый простой SOURCE TYPE слово SOURCE даст адрес и длину текста входной строки, а TYPE его напечатает Посложнее : QUINE S" SEE QUINE" EVALUATE ; но не везде слово SEE выведет куайн, слово EVALUATE исполнение кода в строке 88.206.58.212 02:23, 26 августа 2012 (UTC)
BASIC
[править код]10 LIST - это хак, потому что
- интерпретатор бейсика волен поменять регистр, и на выходе будет 10 list
- программа пользуется тем, что её копия хранится в интерпретаторе (в книге "Этюды для программистов" это оговорено)
- компилируемые диалекты бейсика (например, Turbo Basic), естественно, не обязаны поддерживать эту функцию
Nickolay.merkin 15:47, 24 ноября 2009 (UTC)Nickolay.merkin 15:47, 24 ноября 2009 (UTC) Nickolay.Merkin
Brainfuck
[править код]переносы строк добавлены для читабельности
Какой тонкий программерский юмор
Мимокрокодил 88.81.226.206 12:39, 27 января 2011 (UTC)
Perl
[править код]Люди, имейте совесть! Сначала заменяете куайн на чтение исходного кода, а затем вычёркиваете вообще, дескать, это не куайн :) Ну хотя бы откатывайте правку, заменяющую куайн чтением исходного кода сразу, а не подтверждайте её. Alexsaa 21:21, 24 июля 2011 (UTC)
- Да, кстати perl'овых квайнов много http://www.nyx.net/~gthompso/self_perl.txt
- ну хоть такой бы показали:
- $b='$b=%c%s%c;printf$b,39,$b,39;';printf$b,39,$b,39;
- Не всё, что по той ссылке — полноценные куайны. Сомнительно, можно ли считать "честным куайном" то, что использует eval. И уж точно нельзя считать куайном то, что пользуется open 0. А свой куайн я возвращаю. Он достаточно перловый по духу и совершенно честный по сути. --Alexsaa 22:25, 8 апреля 2013 (UTC)
Нужны примеры кода
[править код]Зачем-то откатили примеры куайнов на нескольких языках. Считаю, что в статье должны быть примеры кода. В английской википедии они есть Miks2012 (обс.) 19:43, 4 апреля 2023 (UTC)