Информация о списке внутри списка

топ 100 блогов lex_kravetski05.08.2021 Интересно, что не только мне в комментах русскоязычные типа знатоки математики такое писали, но и в англоязычном сегменте интернета люди друг другу такое тоже пишут. Там, правда, это ещё и пытаются аргументировать, а не декларируют аки божье слово, даденное людям через откровение пророка, в роли коего выступал их вузовский преподаватель, но всё-таки пишут.

Что-де «а как же можно в множество сложить что-то там, что приобретает определённость только после построения этого множества?».

Надо отметить, что, например, Кантора такое вообще не смущало: он запросто искал в множестве элемент, который в принципе можно построить только после завершения построения этого множества. Но то, разумеется, Кантор — ему можно. А вот тем, кто анализирует его доказательство, уже нельзя. Наверно так.

Однако мне, как программисту со стажем, сама постановка вопроса «как можно?» в те времена, когда этим постоянно пользуются для написания программ, кажется абсурдной. Это всё равно, как если бы кто-то в 2021-м начал риторически вопрошать: «да осмысленна ли вообще идея летательных аппаратов тяжелее воздуха?!». Эй, алё, уже немножечко поздно сомневаться в возможности такового.

Ясен перец, вообще любая реализация «ленивых вычислений» позволит вам положить в контейнер некий элемент, который является результатом какой-то операции с этим контейнером. И это всё не гипотетические построения — вы можете написать такую программу, и она будет работать, по коей причине вопрос «возможно ли такое или мы где-то ошиблись в гипотезах?» тут же снимется.

Например, на Wolfram простейший вариант вот такой:

f = .;
list = {f} ~Join~ RandomInteger[10, RandomInteger[5]];
f = Length[list];


Заметьте, я тут специально кладу в список заранее неизвестное число случайных элементов — чтобы уж точно не было сомнений, что оно работает вовсе не потому, что «интерпретатор/компилятор что-то там соптимизировал».

Не, всё норм: положили в список некий символ на этапе построения этого списка, а после этого придали символу некий смысл. Смысл зависит от построенного списка, но никакого противоречия тут нет: всё сработает, причём ровно так, как ожидается.

Причём этот вариант не единственный. Можно было бы положить прямо сразу вызов некоторой функции или прямо её тело, инактивировав оные, а после построения списка активировав всё его содержимое. Или, например, положить в список ссылки на функции, вычисляющие соответствующий элемент, вместо самих элементов. Ленивые вычисления — распространённая штука, и в куче языков программирования реализованы те или иные способы их организовать.

Однако наличие даже хотя бы одного варианта хотя бы в одном языке уже говорит, что таки да, так можно. Причём говорит это гораздо более весомо, чем любые гипотетические рассуждения.

Дальше вопрос только в том, как именно и в каком порядке мы определяем «смыслы». В каких-то случаях у нас может возникнуть бесконечная рекурсия, например. А в каких-то других до следующей строки дело вообще никогда не дойдёт, поскольку предыдущая никогда не завершит вычисления. Ну да, если так, то хреновый у вас алгоритм. Пичалька.

Вы предполагаете, что можно «достроить» бесконечный список? Ну Ок. Тогда мы дойдём до третьей строки — всё в порядке. И в первом элементе списка будет лежать его длина — ну там, в виде константы Infinity или какого-нибудь алефа (кто не знает, это буковка из иврита такая, которой в комплекте с индексом обозначают гипотетические ещё более бесконечные бесконечности).

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

Это, блин, сегодняшняя реальность, а не гипотеза. Оно в куче мест уже встроено прямо в стандартную библиотеку — поздно сомневаться в возможности его реализации.

Если с вашей точки зрения на базе некоторого списка всегда можно построить какое-то число и до третьей строки мы обязательно дойдём, то пишите это число в неё после «f =», и оно будет в этом списке.

Этот практический код работает на практике, поэтому вопросы — к вашему воображаемому. Это в нём у вас бесконечная рекурсия, невычислимость и стопицот каких-то ещё возможных проблем.

Если для спасения вашей гипотезы вам в 2021-м надо постулировать невозможность существования самолётов, то это ваша гипотеза явно описывает какую-то альтернативную реальность, а вовсе не «самолёты существуют неправильно, поскольку не соответствуют моей мощной теории».



doc-файл

Оставить комментарий

Предыдущие записи блогера :
Архив записей в блогах:
Ещё небольших зверей. Вроде как пришёл посмотреть. ...
12-летняя Милли Бобби Браун (Millie Bobby Brown) стала всемирно известной после съемок в телесериале «Очень странные дела» , где сыграла одну из главных ролей. Милли родилась 19 февраля 2004 года в испанской Марбелье, после чего, вместе с родителями, сменила немало городов ...
Абсолютно ясно, что экономика все еще находится в трудном положении. Более 10 миллионов человек остались без работы, 4 миллиона без работы по полгода и больше, 24 миллионам взрослых и 12 миллионам детей буквально не хватает еды", - сказал он, добавив, что в связи с этим намерен ...
Сегодня утром мне приснился сон.. Что я возвращаюсь из Университета, привычной дорогой, и встречаю своего однокурсника. Он улыбается мне, идёт рядом, так провожает до самого дома. Мы стоим у ворот, уже успели разговориться, смеёмся, так неохота ...
Дней 10 назад, здесь был пост ( http://community.livejournal.com/ru_d70/2477591.html ) о том “стоит ли поднимать ISO или можно снимать с недодержкой и потом вытягивать изображение в RAW-конвертере”. Большинство (если не все) ответов были такие “лучше шумный снимок, чем ...