это уже слишком банальный пример, и для него функция F восстанавливается как другой однозначный вариант функции F(более простой) и HelloSum. при этом наличие нескольких восстановленных функций F ничему не мешают.
HellSum(source)=>source.F_2().Sum();
F_2(source)=>source.Select(i => i ^ (i >> 16));
или так
HellSum(source)=>source.F_2(a:0).Sum();
F_2(source, a)=>source.Select(i => (i << (a &&0x4)) ^ (i >> 16));
т.е. как только появляется реальный код для которого выполняется однозначность, по нему всегда можно восстановить спецификацию результата.
и здесь тоже можно выкинуть спецификации на yield, ienumerable и foreach
DG>>декларация же может быть задана в виде: результат должен быть таким же, как результат вот такого-то вычисления, а выполнять можете как хотите (и для сложных алгоритмов нет другого способа задания результата) S>Как интересно. То есть вы настаиваете, что разницы между декларативным и императивным описаниями нет. Тогда объясните это vdimas-у, а то он почему-то считает РА более императивной, чем РИ.
нет четкой границы, где заканчивается декларативная программа и начинается императивная (и соответственно, черно/белый подход — декларативная/императивная имеет очень низкую полезность)
при этом можно использовать сравнительную степень более декларативная/менее декларативная на той или иной метрике декларативности
DG>>при этом утверждение "делайте как хотите, главное чтобы результат был тем же самым" и так уже говорится, что для ФЯ, что для ООП и т.д. — что внутреннее поведение неважно, важно чтобы сохранялось внешнее поведение(внешний результат) S>Вы движетесь в правильную сторону. Остаётся понять, что такое "внешнее поведение", и вы сможете отличить декларативную программу от императивной.
я знаю, что это такое.
а вот samius и ты похоже не понимаете что такое спецификация результата, как и на чем она пишется. скорее всего это означает, что вы либо на прологе(или аналоге) вообще ничего не писали, или не писали сложные вещи.
DG>>что две спецификации результата, отличающиеся лишь спецификацией результата для некорректного поведения — для значимой части программ являются одной и той же спецификацией. S>Отлично. Осталось определить, что такое "корректное поведение", что такое "некорректное поведение", и что такое "результат". А то вот вы взяли и "исправили" мою программу, написав свою. Да, "результат" работы вашей программы иногда получается таким же, как и у моей программы.
S>Но ведь тогда я могу в некоторой библиотеке заменить вычисление синуса на return 0; сказав, что во всех корректных программах аргумент всегда равен нулю, а те, кто передаёт не ноль — сами виноваты. Чем моя аргументация будет хуже вашей? Она столь же произвольна.
ты перепрыгиваешь:
во-первых, от реальных программ к библиотекам
во-вторых, к правилам хорошего тона для кодирования.
ни то, ни другое не имеет никакого отношения к тому, что по реальной программе (на которую накладывается лишь требование однозначности) можно восстановить спецификацию результата, и выкинуть спецификацию вычислителя
я согласен с тем, что правила "хорошо пахнущего кода" упрощают восстановление спецификации результата
S> Это как раз доказывает что есть люди, которые считают что понятие "упорядоченная последовательность" неоднозначно. Хотя на самом деле оно однозначно.
выйди на улицу. и спроси у первых двадцати прохожих, что такое "упорядоченная последовательность" и запиши.
для проверки понимания также стоит спросить, как они будут проверять, что последовательность упорядочена, и каких действий достаточно для проверки упорядоченности.
на сколько я знаю, тебя ждут сюрпризы
S>Эффективным было бы сказать "есть множество писем", уповая на то, что собеседник знает что такое множество, а не объяснять что под последовательностью ты подразумеваешь множество, вопреки понятию "последовательность".
вот только проблема в том, что для C#-программиста и математика понятия множество, коллекция, последовательность и т.д. отличаются.
для программистов пишушего на других языках эти понятия тоже будут иметь свое понимание.
для C#-программиста последовательность более общее понятие, чем множество. т.к у последовательности есть только требование перебора элементов, а у множества уже появляется требование сравнимости элементов, проверка наличия элемента за O(1) и т.д.
коллекция — это последовательность для которой известно количество.
и это понимание понятий последовательность, коллекция и множество формируется на основе .net-интерфейсов: IEnumerable, ICollection, ISet
для математика наоборот множество более общее понятие, чем последовательность, потому что первое может не иметь способа перебора элементов, а для последовательности уже задан способ перебора элементов.
и для большинства понятий это нормальное явление, что в каждой области свое толкование одного и того же понятия.
S>Эффективным было бы сказать "есть множество писем", уповая на то, что собеседник знает что такое множество, а не объяснять что под последовательностью ты подразумеваешь множество, вопреки понятию "последовательность".
другие виды общения еще менее эффективные.
в качестве примера можно взять этот тред: копий вокруг трактовки терминов сломано много, а по сути сообщений не так уж и много,
при этом и введение терминов не помогало — как только вводятся термины, то их вообще никто не читает — посмотри сколько сообщений в ветке относительное ООП, или в ветке л-существования.
и это в часности вызвано тем, что человек имеет очень ограниченные способности по усвоению понятий (одна из оценок в 2^16)
и это означает, что человеку доступно лишь 16 последовательных развилок в трактовании терминов.
Здравствуйте, DarkGray, Вы писали:
S>> Это как раз доказывает что есть люди, которые считают что понятие "упорядоченная последовательность" неоднозначно. Хотя на самом деле оно однозначно.
DG>выйди на улицу. и спроси у первых двадцати прохожих, что такое "упорядоченная последовательность" и запиши. DG>для проверки понимания также стоит спросить, как они будут проверять, что последовательность упорядочена, и каких действий достаточно для проверки упорядоченности.
DG>на сколько я знаю, тебя ждут сюрпризы
Тут все просто. Понятие однозначно, но его могут не знать. то что человек не может сформулировать даже интуитивно ему понятное — не значит, что он пользуется другим понятием. Человек с улицы не показатель однозначности понятия.
Но ты же вкладываешь свой смысл в термины при общении с теми, кому известно их значение, кому приходится работать с этими определениями. И называешь это эффективным. Эффект один — озадачивание собеседника. Если ты своими полетами мысли добиваешься именно этого, то да, прием эффективный.
S>>Эффективным было бы сказать "есть множество писем", уповая на то, что собеседник знает что такое множество, а не объяснять что под последовательностью ты подразумеваешь множество, вопреки понятию "последовательность".
DG>вот только проблема в том, что для C#-программиста и математика понятия множество, коллекция, последовательность и т.д. отличаются.
Не может быть. Есть понятия — математические абстракции, есть частные реализации этих абстракций. То, о чем именно в данном случае речь, можно понять из контекста, если об этом не сказано напрямую. Но контейнер System.Collections.Generic.Set никак не подменяет понятие математической абстракции "множество". DG>для программистов пишушего на других языках эти понятия тоже будут иметь свое понимание.
DG>для C#-программиста последовательность более общее понятие, чем множество. т.к у последовательности есть только требование перебора элементов, а у множества уже появляется требование сравнимости элементов, проверка наличия элемента за O(1) и т.д.
Тут ты говоришь не о понятиях, а о реализациях. Причем с требованием проверки наличия за O(1) ты явно загнул. Опровержение тому — OrderedSet.
DG>коллекция — это последовательность для которой известно количество. DG>и это понимание понятий последовательность, коллекция и множество формируется на основе .net-интерфейсов: IEnumerable, ICollection, ISet
Формировать понятия о математических асбтракциях на основе .net интерфейсов — это ошибка природы.
DG>для математика наоборот множество более общее понятие, чем последовательность, потому что первое может не иметь способа перебора элементов, а для последовательности уже задан способ перебора элементов.
DG>и для большинства понятий это нормальное явление, что в каждой области свое толкование одного и того же понятия.
Теперь я понял, ты в форуме декларативного программирования в русле разговора о хаскеле объяснял собеседнику о смысле понятия, которое ты вкладываешь в слово "последовательность" на основе понятия IEnumerable из .net. И при этом сказал что письма просто хранятся в последовательности, а на самом деле их просто много...
Браво, что тут сказать
Здравствуйте, DarkGray, Вы писали:
S>>Эффективным было бы сказать "есть множество писем", уповая на то, что собеседник знает что такое множество, а не объяснять что под последовательностью ты подразумеваешь множество, вопреки понятию "последовательность".
DG>другие виды общения еще менее эффективные. DG>в качестве примера можно взять этот тред: копий вокруг трактовки терминов сломано много, а по сути сообщений не так уж и много, DG>при этом и введение терминов не помогало — как только вводятся термины, то их вообще никто не читает — посмотри сколько сообщений в ветке относительное ООП, или в ветке л-существования.
Этот тред показателен тем, что вместо того что бы использовать общепринятые определения, ты выдумывал свои.
DG>и это в часности вызвано тем, что человек имеет очень ограниченные способности по усвоению понятий (одна из оценок в 2^16) DG>и это означает, что человеку доступно лишь 16 последовательных развилок в трактовании терминов.
Какой смысл вообще о чем-то разговаривать, если собеседник не понимает о чем ты говоришь, и только и делает что пытается вытащить у тебя смысл, который ты вкладываешь в устоявшиеся термины? Каким образом вообще нужно строить беседу, если в течении беседы оказывается что ты используешь термины таким образом, что это противоречит их определениям?
Здравствуйте, DarkGray, Вы писали:
S>>Вот такого примера достаточно:
DG>это уже слишком банальный пример, и для него функция F восстанавливается как другой однозначный вариант функции F(более простой) и HelloSum. DG>т.е. как только появляется реальный код для которого выполняется однозначность, по нему всегда можно восстановить спецификацию результата.
Я правильно понимаю, что для каждого примера применения функции F вы предлагаете отдельные варианты функции F?
1. К сожалению, вопросы реального программирования не исчерпываются разработкой программ для выполнения фиксированного алгоритма над фиксированным набором входных данных.
2. Варианты преобразований, которые вы предлагаете, не сохраняют эквивалентность с исходной программой. В этом, собственно, и состоит проблема перевода императивной программы в декларативную форму.
DG>нет четкой границы, где заканчивается декларативная программа и начинается императивная (и соответственно, черно/белый подход — декларативная/императивная имеет очень низкую полезность) DG>при этом можно использовать сравнительную степень более декларативная/менее декларативная на той или иной метрике декларативности
Ок, мы всё ещё с нетерпением ждём примера этой метрики. Ваши предыдущие попытки ввести такую метрику были, скажем так, неудачны. DG>я знаю, что это такое. DG>а вот samius и ты похоже не понимаете что такое спецификация результата, как и на чем она пишется. скорее всего это означает, что вы либо на прологе(или аналоге) вообще ничего не писали, или не писали сложные вещи.
О, ещё один телепат в форуме. Ок, предположим, вы правы. Мы с samius никогда не писали программ сложнее Hello World и алгоритмов сложнее bubblesort. Вы, надо полагать, писали. Почему же тогда у вас восстановление спецификации результата по спецификации протокола вызывает такие затруднения?
S>>Но ведь тогда я могу в некоторой библиотеке заменить вычисление синуса на return 0; сказав, что во всех корректных программах аргумент всегда равен нулю, а те, кто передаёт не ноль — сами виноваты. Чем моя аргументация будет хуже вашей? Она столь же произвольна.
DG>ты перепрыгиваешь: DG>во-первых, от реальных программ к библиотекам
А чем отличается библиотека от реальной программы? Вы не спешите отвечать, а то опять получится ерунда. DG>во-вторых, к правилам хорошего тона для кодирования.
Не вижу никакого перехода к правилам хорошего тона. Зачем вы его сюда приплели — совершенно непонятно. Лично я пока что обсуждал только вопросы корректности преобразования программ из императивной формы в декларативную. Вы утверждаете, что это — тривиальное занятие, но при этом весьма несложный случай у вас вызывает затруднения. DG>ни то, ни другое не имеет никакого отношения к тому, что по реальной программе (на которую накладывается лишь требование однозначности) можно восстановить спецификацию результата, и выкинуть спецификацию вычислителя
Ну, моя функция синуса вполне себе однозначна. Просто я предпочёл вот так восстановить спецификацию результата.
DG>я согласен с тем, что правила "хорошо пахнущего кода" упрощают восстановление спецификации результата
Я не понимаю, с чем вы согласны.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
DG>>и для большинства понятий это нормальное явление, что в каждой области свое толкование одного и того же понятия. S>Теперь я понял, ты в форуме декларативного программирования в русле разговора о хаскеле объяснял собеседнику о смысле понятия, которое ты вкладываешь в слово "последовательность" на основе понятия IEnumerable из .net.
так как говоришь в математике называется множество с заданной функцией перебора элементов?
DG>>>и для большинства понятий это нормальное явление, что в каждой области свое толкование одного и того же понятия. S>>Теперь я понял, ты в форуме декларативного программирования в русле разговора о хаскеле объяснял собеседнику о смысле понятия, которое ты вкладываешь в слово "последовательность" на основе понятия IEnumerable из .net.
DG>так как говоришь в математике называется множество с заданной функцией перебора элементов?
Если ты о последовательности, то она не является множеством. Потому затрудняюсь ответить, как называется такая пара, особенно безотносительно свойств этой пары.
Лучше прочитай определение последовательности.
DG>>так как говоришь в математике называется множество с заданной функцией перебора элементов? S>Если ты о последовательности, то она не является множеством.
а где ты говоришь учился на математика?
Последовательность — это набор элементов некоторого множества:
для каждого натурального числа можно указать элемент данного множества;
это число является номером элемента и обозначает позицию данного элемента в последовательности;
для любого элемента (члена) последовательности можно указать следующий за ним элемент последовательности.
http://en.wikipedia.org/wiki/Sequence
S> Потому затрудняюсь ответить, как называется такая пара, особенно безотносительно свойств этой пары. S>Лучше прочитай определение последовательности.
хуже невежд только невежественные фанатики, которые считают, что то, что они знают — является полным и окончательным знанием (в частности, считающие — что они-то уж знают, что такое правильное определение терминов)
ps
формальное определение последовательности — это произвольное множество отображенное на множество натуральных чисел.
ззы S>Если ты о последовательности, то она не является множеством.
в последней версии математики вообще ничего кроме множеств нет, даже числа и то вводятся, как множества.
DG>>а вот samius и ты похоже не понимаете что такое спецификация результата, как и на чем она пишется. скорее всего это означает, что вы либо на прологе(или аналоге) вообще ничего не писали, или не писали сложные вещи. S>О, ещё один телепат в форуме. Ок, предположим, вы правы. Мы с samius никогда не писали программ сложнее Hello World и алгоритмов сложнее bubblesort. Вы, надо полагать, писали. Почему же тогда у вас восстановление спецификации результата по спецификации протокола вызывает такие затруднения?
такое ощущение, что ты даже не прочитал мое утверждение. я предполагаю, что ты и samius не писали сложных программ на прологе.
то, что ты можешь писать достаточно сложные программы на одном-двух своих любимых языках верю, особенно в той области в которой набил руку.
vdimas скорее всего сможет осилить более сложные программы, чем ты, а samius более простые чем ты.
при этом твой код скорее всего более четкий и структурированный и проще в поддержке, чем у vdimas-а
DG>>>так как говоришь в математике называется множество с заданной функцией перебора элементов? S>>Если ты о последовательности, то она не является множеством.
DG>а где ты говоришь учился на математика?
УрГУ
DG>
DG>Последовательность — это набор элементов некоторого множества:
DG> для каждого натурального числа можно указать элемент данного множества;
DG> это число является номером элемента и обозначает позицию данного элемента в последовательности;
DG> для любого элемента (члена) последовательности можно указать следующий за ним элемент последовательности.
a sequence is an ordered list of objects (or events)
Твой трюк с подменой текста в википедии пошловат.
S>> Потому затрудняюсь ответить, как называется такая пара, особенно безотносительно свойств этой пары. S>>Лучше прочитай определение последовательности.
DG>хуже невежд только невежественные фанатики, которые считают, что то, что они знают — является полным и окончательным знанием (в частности, считающие — что они-то уж знают, что такое правильное определение терминов)
Еще хуже — тыкать в определение, и не понимать что там написано, или подменять текст в нем.
DG>ps DG>формальное определение последовательности — это произвольное множество отображенное на множество натуральных чисел.
Произвольное множество, отображенное на множество натуральных чисел, в общем случае не является множеством.
Вот тебе тривиальный пример { 1, 1, 1, 1, ... }
DG>ззы S>>Если ты о последовательности, то она не является множеством.
DG>в последней версии математики вообще ничего кроме множеств нет, даже числа и то вводятся, как множества.
Выше пример не множества.
Здравствуйте, DarkGray, Вы писали:
DG>такое ощущение, что ты даже не прочитал мое утверждение. я предполагаю, что ты и samius не писали сложных программ на прологе.
Я — прочитал. Просто его можно понять двояко. Ок, поправка принимается. Да, я не писал сложных программ на прологе.
Однако, я не понимаю, какое это отношение имеет к конверсии императивных программ в декларативные?
На всякий случай напомню, что пролог решает обратную задачу. DG>то, что ты можешь писать достаточно сложные программы на одном-двух своих любимых языках верю, особенно в той области в которой набил руку.
DG>vdimas скорее всего сможет осилить более сложные программы, чем ты, а samius более простые чем ты. DG>при этом твой код скорее всего более четкий и структурированный и проще в поддержке, чем у vdimas-а
А вылечить по фотографии от заикания, или, скажем, алкоголизма, у вас возможность есть?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, samius, Вы писали:
DG>>ps DG>>формальное определение последовательности — это произвольное множество отображенное на множество натуральных чисел. S>Произвольное множество, отображенное на множество натуральных чисел, в общем случае не является множеством. S>Вот тебе тривиальный пример { 1, 1, 1, 1, ... }
Вы слишком строги с коллегой DG. Он, конечно же, имел в виду отображение множества натуральных чисел на наше произвольное множество, а не наоборот.
Хотя задать последовательность, конечно же, можно и без прямого указания этого отображения. А, например, при помощи задания на элементах множества отношения полного порядка. Из этого отношения можно восстановить отображение натуральных чисел в элементы множества.
Что характерно, никакой "функции перебора" ни в том, ни в другом случае нет, несмотря на трогательные заблуждения нашего оппонента. Если у нас есть отображение множества натуральных чисел на множество наших элементов, M: x:N->s:S, то нам ничего перебирать не нужно. Можно просто получить s42 = M(42).
Задание "функции перебора" — это третий способ математически определить последовательность, задав функцию Succ: s1:S -> s2:S.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
DG>>такое ощущение, что ты даже не прочитал мое утверждение. я предполагаю, что ты и samius не писали сложных программ на прологе. S>Я — прочитал. Просто его можно понять двояко. Ок, поправка принимается. Да, я не писал сложных программ на прологе. S>Однако, я не понимаю, какое это отношение имеет к конверсии императивных программ в декларативные?
Опыт написания сложных программ на языках типа пролога дает понимание, что то, что люди считают однозначным на самом деле таковым не является, и что однозначность появляется только на очень узких задачах.
S> отображение множества натуральных чисел на наше произвольное множество
из одного следует другое. можно лишь поговорить на тему: скольки элементам одного множества сколько элементов другого множества соответствует.
S>Что характерно, никакой "функции перебора" ни в том, ни в другом случае нет
если есть отображение множества на множество натуральных чисел, при этом одно натуральное число переходит в один элемент множества, то есть и функция перебора. перебирая натуральные числа перебираются и элементы исходного множества.
Здравствуйте, DarkGray, Вы писали:
S>>Вот тебе тривиальный пример { 1, 1, 1, 1, ... }
DG>и каким свойством эта штука не обладает, по которому его можно исключить из класса множеств?
DG>например, берем одно из определений множества DG>
DG>Множество есть совокупность различных элементов, мыслимая как единое целое
DG>элементы есть, совокупность есть, единое целое тоже есть — значит множество.
Здравствуйте, DarkGray, Вы писали:
S>>Что характерно, никакой "функции перебора" ни в том, ни в другом случае нет
DG>если есть отображение множества на множество натуральных чисел, при этом одно натуральное число переходит в один элемент множества, то есть и функция перебора. перебирая натуральные числа перебираются и элементы исходного множества.
Только вот тогда последовательность { 1, 1, 1, 1 } не задать, так как одному элементу множества (1) соответствует аж 4 натуральных. Так что всё же наоборот, отображение натуральных на наше.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, samius, Вы писали:
DG>>>ps DG>>>формальное определение последовательности — это произвольное множество отображенное на множество натуральных чисел. S>>Произвольное множество, отображенное на множество натуральных чисел, в общем случае не является множеством. S>>Вот тебе тривиальный пример { 1, 1, 1, 1, ... }
S>Вы слишком строги с коллегой DG. Он, конечно же, имел в виду отображение множества натуральных чисел на наше произвольное множество, а не наоборот.
Вау, я был слишком добр к нему. Я не заметил, что он написал отображение НА множество натуральных чисел, и считал что он написал отображение множества натуральных чисел.
Пример, кстати, показывает отображение множества натуральных чисел на множество натуральных чисел, заданное в виде
f(n) = 1
S>Хотя задать последовательность, конечно же, можно и без прямого указания этого отображения. А, например, при помощи задания на элементах множества отношения полного порядка. Из этого отношения можно восстановить отображение натуральных чисел в элементы множества.
Это тот случай, когда множество элементов последовательности будет совпадать с множеством элементов множества. Но наличие порядка будет отличать последовательность от множества.
S>Что характерно, никакой "функции перебора" ни в том, ни в другом случае нет, несмотря на трогательные заблуждения нашего оппонента. Если у нас есть отображение множества натуральных чисел на множество наших элементов, M: x:N->s:S, то нам ничего перебирать не нужно. Можно просто получить s42 = M(42).
S>Задание "функции перебора" — это третий способ математически определить последовательность, задав функцию Succ: s1:S -> s2:S.
Да, как способ годится, но он не такой гибкий, как отображение. В виде функции Succ мы не сможем задать последовательности вида { 1, 1, 1, 2, 2, 2, ... }
Здравствуйте, DarkGray, Вы писали: DG>Опыт написания сложных программ на языках типа пролога дает понимание, что то, что люди считают однозначным на самом деле таковым не является, и что однозначность появляется только на очень узких задачах.
Не понимаю, к чему вы это.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.