Здравствуйте, samius, Вы писали:
E>>Не верю. S>а ему?
Так верю. Я обратное отношение ((26/30)*(27/30)*(28/30)*(29/30)) прикидывал. Но всё равно ошибся. Таки 30%,а не 20...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, ambel-vlad, Вы писали:
E>>И как вычислим свёртку? Что имеется в виду?
AV>А с чего ты решил, что там обязательно свертка? Лишь потому что для примера я предложил сложить все выбранные числа? Но если ты внимательно прочитаешь условия, то это было лишь только для примера. А так выбранные данные могут быть данными для обсчета какой-то модели или финансового инструмента.
Не совсем понимаю, как так всё устроено. Типа инструменту на вход надо сформировать какую-то поодпоследовательность первого массива?
У вас там в питонском коде, кстати, косяк небольшой. От сворачиваемой операции требуют наличия нуля. По идее это лишнее.
AV>Есть одна принципиальная разница. Автор. И это не переход на личности. Но подход, который был продемонстрирован до сих пор не дает никаких оснований считать, что из этого языка выйдет что-то. Готов поставить сотню баксов, что в язык будет долго и мучительно добавляться очередная "фича" и достаточно быстро эти фичи удавят друг друга.
Этого я вообще не понимаю. Если тебе интересно САМОМ играться, то ты можешь добавить фичу сам. А если тебе хочется обсудить PC_2, то я тебе ещё раз предлагаю завести отдельный топик...
AV>Если она такая простая, то пару десятков секунд можно и потратить.
Зачем? Вот я потратил. И думаешь меня это радует?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, samius, Вы писали:
S>>Мне кажется ровно наоборот. Явные комбинации генераторов не нуждаются в оптимизации. Тем более что они не исключают оперирование предикатами. E>Ну как будет устроена программа, которая перебирает строки, соответсвующие регэкспу + требование баланса скобок?
За задачу эффективной генерации строк по заданному регекспу я не возьмусь только для того что бы что-то доказать.
Потому написал бы эффективный генератор строк с балансом скобок и профильтровал бы его регекспом.
S>>Не проблема. Могу написать так, что для конечного алфавита любая конечная строка может быть достигнута за конечное время. И это будет эффективно, да и коду не сильно больше чем в размещениях. Просто я буду не фильтровать алфавит, а расширять его при переходе к вложенным генераторам. Если попросишь таки показать — займет какое-то время. Мгновенно не напишу, но ничего невозможного не вижу. E>Про расширять алфавит не понял совсем. Очевидно что в таких строчках на первом месте может быть любая буква. Куда там дальше расширять-то?
Алфавит, надеюсь, не из одной буквы? Если нет, то первым делом берем все двухбуквенные строчки с вида 'aa','bb',..., потом 'aaa', 'bba', ... 'aab', 'bbb', ... и вперед.
Можно и для бесконечного алфавита организвать.
S>>В свою очередь прикинь (писать не надо) как ты эффективно сделаешь переборщик (IsPrime(I)?I) где IsPrime — пользовательская функция E>Ну если это просто функция от просто позиции переборщика, то это никак и никогда не оптимизируешь ни на каком языке. Если же речь идёт о каких-то комбинациях, ну, например, мы хотим написать переборщик возрастающих последовательностей простых чисел, то очень даже напишу...
А где это у тебя написано, что там возрастающая последовательность простых чисел? Тебе дали предикат общего вида IsPrime::'a -> bool. А в нем условия, те же переборы, накопление и анализ результата...
S>>
S>>Enumerable.Range(0, oo) /// генератор чисел 0..оо где бесконечность условная
S>> .Select(x => x*2 + 1) /// отображаем числа в нечетные
S>> .Where(x => IsPrime(x)); /// выбираем только простые из них.
S>>
S>>Все стандартное для дотнета кроме IsPrime. Range можно переписать и для BigInt-ов, если что. S>>И эта штука на фильтрации работает как минимум в 2 раза быстрее чем (IsPrime(I)?I).
E>Ну это первый шаг решета Эратосфена. Никто не мешает так же профильтровать и на RS: (i%2==0&&i%3==0&&i%5==0&&i%%7==0&&IsPrime(I)?I)
И до каких пор фильтровать?
S>>Хочешь я эту штуку продолжу до генерации пар простых с разницей в 2 — (3,5),(5,7),(11,13),... S>>либо только тех пар простых, сумма цифр которы четна?
E>Так на RS это тоже легко сделать, и при том оно наверное и оптимизироваться будет хорошо...
наверное, или будет?
S>>Комбинация генераторов не исключает фильтрацию, а значит ту оптимизацию о которой ты говоришь, можно применить и там. В то время как одной только фильтрацией не догнать явно заданные генерируемые последовательности.
E>Я не против комбинации генераторов. Я просто не понимаю, что конкретно ты предлагаешь? Я же тебе предлагал записать переборщики нескольких множеств разных...
Напомни. Я помню только о строках с повторами, и о строках удовлетворяющих регекспу с балансом скобок.
E>Без примера не понятно о чём речь.
Я же вроде привожу примеры
Здравствуйте, samius, Вы писали:
S>наверно без разницы. А вот находить нужную комбинацию состояний итераторов будет сложнее. Особенно после изменения алфавита.
Если изменится алфавит, то изменится и нумерация...
S>Ты решительно отвергаешь необходимость paging-а для такой задачи?
Нет. Просто я не думаю, что эта задача полезна для развития языка.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, samius, Вы писали:
S>>Мне кажется ровно наоборот. Явные комбинации генераторов не нуждаются в оптимизации.
E>Кстати, почему? По идее, на разных архитектурах надо по разному перебирать одни и те же множества...
Не понимаю, в чем проблема. Можно и по-разному.
E>У генераторов, если я правильно понимаю о чём речь, есть недостаток -- в них намертво вбит порядок итерации множества. А ведь это не обязательно надо...
Нет, не намертво. Сомневаешься что можно написать Enumerable.Range(start, count) который разбивает диапазон и скармливает разным вычислителям?
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, samius, Вы писали:
E>Мне кажется, что с библиотекой будут трудности. Трудности будут вызваны тем, что в RS хитро перепутана декларация кода и итерации. Не понятно, как это передать в библиотеку. Тут хочется иметь транслятор, на самом деле.
E>Ну просто пример.
E>Вот у нас есть матрица M и вектор V мы записываем их произведение:
E>M.I.J*V.J\J\+
E>Что и как тут сделает библиотека?
не знаю, что делает \J, но допустим так
var M = RS.CreateArray(width, height);
var V = RS.CreateArray(length);
var expression = (M.I.J*V.J).FoldJ().Sum();
var result = RS.Eval(expression);
Здравствуйте, Erop, Вы писали:
E>>>И как вычислим свёртку? Что имеется в виду?
AV>>А с чего ты решил, что там обязательно свертка? Лишь потому что для примера я предложил сложить все выбранные числа? Но если ты внимательно прочитаешь условия, то это было лишь только для примера. А так выбранные данные могут быть данными для обсчета какой-то модели или финансового инструмента.
E>Не совсем понимаю, как так всё устроено. Типа инструменту на вход надо сформировать какую-то поодпоследовательность первого массива?
Например есть у нас такой инструмент как swap. Нам надо обсчитать его на одних и тех же данных, но при разном кол-ве лет. В массиве хранятся данные для обсчета. И в конце добавлены годы. То есть первый массив представляет собой примерно такое [x1, x2, x3, x4 , 1, 2, 3, 4, 5, 10, 25, 50]. Где x1-x4 данные для обсчета, а 1, 2, 3, 4, 5, 10, 25, 50 — длительность в годах. Второй массив представляет собой что-то типа [((1,4), (5,)), ((1,4), (6,)), ((1,4), (7,)) ...] Функция worker просто тупо обсчитывает один своп имея в своем распоряжении данные (x1-x4) и длительность (1 год или 2 года или 3 года и т.д.). То есть будет что-то типа [x1, x2, x3, x4, 1], [x1, x2, x3, x4, 2], [x1, x2, x3, x4, 3] и т.д. И вот эти расчеты мы вполне может распараллелить.
E>У вас там в питонском коде, кстати, косяк небольшой. От сворачиваемой операции требуют наличия нуля. По идее это лишнее.
Функция писалась человеком, который Питон только-только начал изучать. Да и функция worker использовалась для тестирования. В реальности там совсем другие расчеты были. Да и функция process со временем значительно усложнилась.
AV>>Есть одна принципиальная разница. Автор. И это не переход на личности. Но подход, который был продемонстрирован до сих пор не дает никаких оснований считать, что из этого языка выйдет что-то. Готов поставить сотню баксов, что в язык будет долго и мучительно добавляться очередная "фича" и достаточно быстро эти фичи удавят друг друга. E>Этого я вообще не понимаю. Если тебе интересно САМОМ играться, то ты можешь добавить фичу сам.
Как я уже писал ТС, я считаю данное действие бессмысленным. Потому что это все равно ничего не изменит. Тем более, что насколько я понял, то язык пишется не на основании какой-то спеки, а фичи добавляются отбалды.
Здравствуйте, Erop, Вы писали:
S>>Что подразумевается под балансом скобок? Совпадение открытых и закрытых и их порядка?
E>Ну скобки в нужном порядке и парами E>Ну типа ()()([]) -- баланс есть E>А ()()([)] -- баланса нет.
Понятно. Генератор таких строк — не вопрос. С регекспом сложнее.
S>>Вручную я бы написал эффективный перебор таких строк. А писать оптимизатор, который бы сделал эффективно в частности и эту задачу — побоялся бы. E>Ну, на самом деле, всё сходится к тому, что надо как-то ещё автоматы поддержать. На самом деле описание многомерных множеств им автоматы, которые эти множества описывают -- это что-то очень близкое, вообще-то.
Допустим.
Вот тебе еще один пример: Есть некая хорошая монотонная функция с корнем, пусть даже заданна аналитически в виде некой формулы. И есть последовательность ординат, полученная в результате поиска корня некоторым методом, который тоже задан на языке RS декларативно. Интересующая меня последовательность перебора — те точки этой последовательности, синус которых > 0.
Я высосал это из пальца, реального применения такой чуши придумывать не стану, но вот очень сомневаюсь, что ты сможешь построить сколько-нибудь эффективный перебор таких точек.
А комбинация генераторов его легко переберет
Здравствуйте, samius, Вы писали:
S>За задачу эффективной генерации строк по заданному регекспу я не возьмусь только для того что бы что-то доказать. S>Потому написал бы эффективный генератор строк с балансом скобок и профильтровал бы его регекспом.
Ну, вообще-то, регэксп скорее всего сильнее ограничивает множество строчек, чем требование баланса скобок.
Но можно пойти по пути просто фильтрации гиперкуба сразу двумя фильтрами.
S>Алфавит, надеюсь, не из одной буквы? Если нет, то первым делом берем все двухбуквенные строчки с вида 'aa','bb',..., потом 'aaa', 'bba', ... 'aab', 'bbb', ... и вперед.
а 'abb' где будет?
S>А где это у тебя написано, что там возрастающая последовательность простых чисел? Тебе дали предикат общего вида IsPrime::'a -> bool. А в нем условия, те же переборы, накопление и анализ результата...
Я так понял, что у меня просто есть функция отображающая числа на bool?
E>>Ну это первый шаг решета Эратосфена. Никто не мешает так же профильтровать и на RS: (i%2==0&&i%3==0&&i%5==0&&i%%7==0&&IsPrime(I)?I) S>И до каких пор фильтровать?
Ну вот ты остановился на первом шаге -- выкинул все чётные...
S>наверное, или будет?
Ну предикат "чётная сумма цифр" для меня мутен очень. Ну будут пары генериться, и половина из них примерно отфильтруется наверное...
E>>Без примера не понятно о чём речь. S>Я же вроде привожу примеры
Нет, без примера комбинации переборщиков, о которой ты говоришь.
Ну, например, есть у меня переборщик. Как устроить перебор размещения пятёрок?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, samius, Вы писали:
S>>наверно без разницы. А вот находить нужную комбинацию состояний итераторов будет сложнее. Особенно после изменения алфавита.
E>Если изменится алфавит, то изменится и нумерация...
Только если изменится длина алфавита
S>>Ты решительно отвергаешь необходимость paging-а для такой задачи? E>Нет. Просто я не думаю, что эта задача полезна для развития языка.
Возможно и бесполезна. Но если она не может быть эффективно решена на неком языке, то это как-бы отдаляет язык от позиции общего назначения.
Настаивать на продолжении с номера не стану.
Здравствуйте, ambel-vlad, Вы писали:
AV>Например есть у нас такой инструмент как swap. Нам надо обсчитать его на одних и тех же данных, но при разном кол-ве лет. В массиве хранятся данные для обсчета. И в конце добавлены годы. То есть первый массив представляет собой примерно такое [x1, x2, x3, x4 , 1, 2, 3, 4, 5, 10, 25, 50]. Где x1-x4 данные для обсчета, а 1, 2, 3, 4, 5, 10, 25, 50 — длительность в годах. Второй массив представляет собой что-то типа [((1,4), (5,)), ((1,4), (6,)), ((1,4), (7,)) ...] Функция worker просто тупо обсчитывает один своп имея в своем распоряжении данные (x1-x4) и длительность (1 год или 2 года или 3 года и т.д.). То есть будет что-то типа [x1, x2, x3, x4, 1], [x1, x2, x3, x4, 2], [x1, x2, x3, x4, 3] и т.д. И вот эти расчеты мы вполне может распараллелить.
Что-то, как-то, я бы не сказал, что это образец хорошей программы, и что это вариант исходной задачи, тоже. Например там сначала были коллекции пар чисел, а теперь стали наборы из пары и одного числа. Почему бы им просто не быть тройками и всё?
Ну и такое выражение тоже на RS легко записать, разумеется.
AV>Как я уже писал ТС, я считаю данное действие бессмысленным. Потому что это все равно ничего не изменит. Тем более, что насколько я понял, то язык пишется не на основании какой-то спеки, а фичи добавляются отбалды.
Можешь написать спеку, если она тебе кажется нужной на данном этапе...
PC_2 вроде как даже просил помочь на эту тему...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, samius, Вы писали:
S>Вот тебе еще один пример: Есть некая хорошая монотонная функция с корнем, пусть даже заданна аналитически в виде некой формулы. И есть последовательность ординат, полученная в результате поиска корня некоторым методом, который тоже задан на языке RS декларативно. Интересующая меня последовательность перебора — те точки этой последовательности, синус которых > 0.
Ну я так понял, что мы имеем переборщик каких-то точек, и хотим его профильтровать по условию, что синус > 0. Так?
Ну так в чём проблема?
S>Я высосал это из пальца, реального применения такой чуши придумывать не стану, но вот очень сомневаюсь, что ты сможешь построить сколько-нибудь эффективный перебор таких точек. S>А комбинация генераторов его легко переберет
Ну так тут ничего эффективнее просто перебрать генерируемые этим алгоритмом точки и посчитать синус каждой не просматривается вроде? А именно это сделают и RS и генераторы и т. д...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, samius, Вы писали:
E>>Если изменится алфавит, то изменится и нумерация... S>Только если изменится длина алфавита
Не понимаю. Тебе что ли пофиг какие именно строки перебирать? Главное, чтобы их число совпадал?
S>Возможно и бесполезна. Но если она не может быть эффективно решена на неком языке, то это как-бы отдаляет язык от позиции общего назначения.
Ну вот в С нет генераторов и нет возможности их комбинации, следовательно, а язык общего назначения всё равно
Я вот не понимаю о чём речь. Понятно, что если где-то удобно уметь сочетать переборщики, то надо понять, как их сочетать. Но надо родить какой-то формализм, который позволяет с ними работать. А не абстрактно говорить, что де вот мол есть библиотека. В библиотеке счастья никакого. Надо же иметь средства, для её написания...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, samius, Вы писали:
E>Ну, вообще-то, регэксп скорее всего сильнее ограничивает множество строчек, чем требование баланса скобок. E>Но можно пойти по пути просто фильтрации гиперкуба сразу двумя фильтрами.
Два фильтра для комбинации генераторов не проблема.
S>>Алфавит, надеюсь, не из одной буквы? Если нет, то первым делом берем все двухбуквенные строчки с вида 'aa','bb',..., потом 'aaa', 'bba', ... 'aab', 'bbb', ... и вперед. E>а 'abb' где будет?
Вставим куда-нибудь. Например будем сразу выдавать для каждой строки уникальные перестановки. Это для чего-то важно на данный момент?
S>>А где это у тебя написано, что там возрастающая последовательность простых чисел? Тебе дали предикат общего вида IsPrime::'a -> bool. А в нем условия, те же переборы, накопление и анализ результата... E>Я так понял, что у меня просто есть функция отображающая числа на bool?
Да. Надеюсь, что пользовательские функции имеют место в РС?
E>>>Ну это первый шаг решета Эратосфена. Никто не мешает так же профильтровать и на RS: (i%2==0&&i%3==0&&i%5==0&&i%%7==0&&IsPrime(I)?I) S>>И до каких пор фильтровать? E>Ну вот ты остановился на первом шаге -- выкинул все чётные...
В том варианте — да, выкинул четные. А в варианте с эффективным генератором я выкинул все, и более того закэшировал найденные простые, так что проверку очередного числа я смогу сделать эффективнее, чем это сделает IsPrime(Int). Генератор выкидывает все непростые, твой фильтр только до i%%7, а остальное проверяет каждый раз не сильно эффективно.
S>>наверное, или будет? E>Ну предикат "чётная сумма цифр" для меня мутен очень. Ну будут пары генериться, и половина из них примерно отфильтруется наверное...
четная сумма цифр и у меня будет фильтроваться. Я сомневаюсь в столь же эффективной генерации простых, как и по пользовательскому генератору.
E>Нет, без примера комбинации переборщиков, о которой ты говоришь.
E>Ну, например, есть у меня переборщик. Как устроить перебор размещения пятёрок?
Есть генератор размещений. Если нет — он пишется. Я его приводил на F#. Подсовываешь в него свой переборщик в качестве алфавита, подсовываешь число 5 в качестве длины размещения и на выходе получаешь генератор пяторок твоего переборщика.
var пятерки = permut(myIterator, 5);
Если что — генератор размещений обобщенный, ему поровну чем оперировать, символами, числами, квадратами, табуретками. Единственное условие — элементы алфавита нужно уметь сравнивать.
Здравствуйте, Erop, Вы писали:
AV>>Например есть у нас такой инструмент как swap. Нам надо обсчитать его на одних и тех же данных, но при разном кол-ве лет. В массиве хранятся данные для обсчета. И в конце добавлены годы. То есть первый массив представляет собой примерно такое [x1, x2, x3, x4 , 1, 2, 3, 4, 5, 10, 25, 50]. Где x1-x4 данные для обсчета, а 1, 2, 3, 4, 5, 10, 25, 50 — длительность в годах. Второй массив представляет собой что-то типа [((1,4), (5,)), ((1,4), (6,)), ((1,4), (7,)) ...] Функция worker просто тупо обсчитывает один своп имея в своем распоряжении данные (x1-x4) и длительность (1 год или 2 года или 3 года и т.д.). То есть будет что-то типа [x1, x2, x3, x4, 1], [x1, x2, x3, x4, 2], [x1, x2, x3, x4, 3] и т.д. И вот эти расчеты мы вполне может распараллелить.
E>Что-то, как-то, я бы не сказал, что это образец хорошей программы,
Какие претензии? Данный кусок программы прекрасно работает, читаешь и прост в поддержке.
E>и что это вариант исходной задачи, тоже. Например там сначала были коллекции пар чисел, а теперь стали наборы из пары и одного числа.
Это я ступил уже. Голова не варит слегка. второй массив будет примерно таким [((1,4), (5,5)), ((1,4), (6,6)), ((1,4), (7,7)) ...] Прошу прощения за ошибку.
E>Почему бы им просто не быть тройками и всё?
Нет смысла.
AV>>Как я уже писал ТС, я считаю данное действие бессмысленным. Потому что это все равно ничего не изменит. Тем более, что насколько я понял, то язык пишется не на основании какой-то спеки, а фичи добавляются отбалды.
E>Можешь написать спеку, если она тебе кажется нужной на данном этапе...
А толку? Если она все равно не будет соответствовать языку.
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, samius, Вы писали:
S>>Вот тебе еще один пример: Есть некая хорошая монотонная функция с корнем, пусть даже заданна аналитически в виде некой формулы. И есть последовательность ординат, полученная в результате поиска корня некоторым методом, который тоже задан на языке RS декларативно. Интересующая меня последовательность перебора — те точки этой последовательности, синус которых > 0. E>Ну я так понял, что мы имеем переборщик каких-то точек, и хотим его профильтровать по условию, что синус > 0. Так? E>Ну так в чём проблема?
Проблема в том, что ты предлагаешь записывать не комбинации переборщиков, а предикаты. А в таком случае я сомневаюсь о возможности эффективного перебора указанных точек.
S>>Я высосал это из пальца, реального применения такой чуши придумывать не стану, но вот очень сомневаюсь, что ты сможешь построить сколько-нибудь эффективный перебор таких точек. S>>А комбинация генераторов его легко переберет
E>Ну так тут ничего эффективнее просто перебрать генерируемые этим алгоритмом точки и посчитать синус каждой не просматривается вроде? А именно это сделают и RS и генераторы и т. д...
Если генераторы будут описаны в виде предикатов, то они ничего этого не смогут сделать. Об этом я тут и спорю с тобой.
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, samius, Вы писали:
E>>>Если изменится алфавит, то изменится и нумерация... S>>Только если изменится длина алфавита E>Не понимаю. Тебе что ли пофиг какие именно строки перебирать? Главное, чтобы их число совпадал?
Алгоритму пофиг.
Не важно. Просто я беру алфавит, и прошу показать мне страницу №09872345 с этими паролями. С генерацией от указанного номера это сделать можно, а с генерацией по последнему сохраненному паролю — нет.
Я не настаиваю на условии задачи. Я настаиваю на том что продолжение с номера и продолжение с размещения — это разные задачи и разница может быть значительна.
фтопку пример с паролями
S>>Возможно и бесполезна. Но если она не может быть эффективно решена на неком языке, то это как-бы отдаляет язык от позиции общего назначения. E>Ну вот в С нет генераторов и нет возможности их комбинации, следовательно, а язык общего назначения всё равно
Он именно такой, хотя бы потому что эти генераторы на нем можно реализовать вместе с комбинациями, не спрашивая мнения авторов, комитета и т.п. на возможность добавить генераторы в язык.
E>Я вот не понимаю о чём речь. Понятно, что если где-то удобно уметь сочетать переборщики, то надо понять, как их сочетать.
То есть ты признал что они полезны?
Тебе не понятно как из сочетать именно в RS? Для других языков вроде бы все понятно... E> Но надо родить какой-то формализм, который позволяет с ними работать.
Я думаю что он уже рожден. Я не знаю лямбда счисления, но думаю что порывшись там можно найти что-то, что тебя интересует. Или спросить тех кто знает. E>А не абстрактно говорить, что де вот мол есть библиотека. В библиотеке счастья никакого. Надо же иметь средства, для её написания...
Да я об необходимости средств с самого начала топика вроде как пекусь.
Естественно. На C# эти переборщики написаны на самом C#. Ну почти. Там на самом деле есть трюк в компиляторе, который преобразует код в конечный автомат. Но на том же хаскеле ничего подобного. Спецсинтаксис есть для такого комбинирования генераторов, но он лишь короткая форма записи и только.
Здравствуйте, samius, Вы писали:
S>>>Алфавит, надеюсь, не из одной буквы? Если нет, то первым делом берем все двухбуквенные строчки с вида 'aa','bb',..., потом 'aaa', 'bba', ... 'aab', 'bbb', ... и вперед. E>>а 'abb' где будет? S>Вставим куда-нибудь. Например будем сразу выдавать для каждой строки уникальные перестановки. Это для чего-то важно на данный момент?
Ну, как бы, хотелось как-то одинаково описывать
"множество пятибуквенных строк", "множество пятибуквенных строк без повторов" и "множество пятибуквенных строк, содержащих хотя бы один повтор"...
S>В том варианте — да, выкинул четные. А в варианте с эффективным генератором я выкинул все, и более того закэшировал найденные простые, так что проверку очередного числа я смогу сделать эффективнее, чем это сделает IsPrime(Int). Генератор выкидывает все непростые, твой фильтр только до i%%7, а остальное проверяет каждый раз не сильно эффективно.
Я не понимаю тебя. Сначала ты сказал про функцию. Теперь речь идёт о генераторе простых чисел, который помнит все предущие. Так? Такой генератор имеет такую особенность, что его не распараллелишь так просто.
На RS сейчас такие писать неудобно. Это правда.
S>Есть генератор размещений. Если нет — он пишется.
Как и на чём? На RS? Или это должна быть некая встроенная в язык конструкция?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
AV>Какие претензии? Данный кусок программы прекрасно работает, читаешь и прост в поддержке.
Ну первый массив, например, вызывает у меня некоторые вопросы...
А про "прост в поддержке" -- это ты загнул, IMHO. Насколько я понял там у вас весь код уже запутался...
AV>Это я ступил уже. Голова не варит слегка. второй массив будет примерно таким [((1,4), (5,5)), ((1,4), (6,6)), ((1,4), (7,7)) ...] Прошу прощения за ошибку.
А! Это вы типа такую подпоследовательность хотите вырезать просто? Ну тоже не сложно на RS записать. Если операция конкатенации переборщиков позволяет свёртку по себе.
x.((y.I.J.1..y.I.J.2)\J\,) -- это у нас переборщик переборщиков исходных подпоследовательностей.
AV>Нет смысла.
Это я согласен. В примере смысл угадывается с трудом
AV>А толку? Если она все равно не будет соответствовать языку.
А зачем писать такую, которая не будет соответствовать?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском