Здравствуйте, PC_2, Вы писали:
S>>В отличии от тебя я не претендую на лавры изобретателя самого короткого языка и не чморю все остальные языки, некоторые из которых даже знаю. S>>Потому, указать тебе место — моя маленькая роль здесь
PC_>Раз не претендуешь, не имеешь опыта, значит сиди тихонько и хоть чуть чуть фильтруй PC_>свои "поучения". Ибо негоже человеку который никак себя не проявил и не написал хоть что PC_>стоищего поучать других, которые показывают хоть какие-то результаты и решения. Точка.
Не тебе судить о моих достижениях. Я их на твой суд не выставлял и не понтовался перед всей планетой.
Здравствуйте, ambel-vlad, Вы писали:
AV>Не знаю где ты видел таких нормальных программистов и архитекторов, но я такое желание чаще всего встречаю у людей только ступивших на стезю программирования.
Потому что переписывание кода ведет элементарно к потраченому ( потраченому не в плане бесполезности )
времени и новым багам.
Поэтому в опытной комманде стараются до последнего поддерживать старый код.
Но любой программист знает, что любое переписывание системы видет к укорочению кода, к его компактности и
улучшению его понимания.
И предпологать что простота кода ( собственно то, каким этот код должен быть, это его идеальное состояние )
и его компактность это НЕ ортогональные понятия.
"Вся страна играть в футбол умеет, лишь мы 11 человек играть не умеем"(с)КВН
Здравствуйте, ambel-vlad, Вы писали:
AV>Зачем? Да хотя бы затем, что предложенное автором извращение намного хуже. И от него он отказываться не намерен.
Слушай, мне правда не интересно обсуждать особенности личности ТС.
Короме того, это тут правилам противоречит.
Охота обсуждать RS -- добро пожаловать. Не охота? -- ну и чего тогда обсуждать?
Ты, собственно, что мне хочешь даказать-то? Или в чём убедить?
AV>Как мелкий? Он же за краткость. А тут получается наоборот. ";" в два раза короче "E ". Но вроде он уже отказался от своего Е
Почему короче? Какая разница в конце оператора волшебный символ или в начале?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, ambel-vlad, Вы писали:
AV>>С какой стати "плачу только за то что запросил" привязано к императивным языкам? Да и насчет "уйти от императивной стороны вопроса" как-то плохо у автора получается. E>Ну просто его на слабо тут разводят...
Да дело не в слабо даже, дело в нормальной доказательной базе.
Если публика видит конструкции которые лучше, короче, понятней, то предлагайте.
Но если они показывают конструкции откровенно хуже по длине, по простое,
по использованию библиотек и встроенных грушек, то никто не будет разбираться
и читать три талмуда чтобы наспех применить хреновый велосипед. Нет смысла.
"Вся страна играть в футбол умеет, лишь мы 11 человек играть не умеем"(с)КВН
Здравствуйте, samius, Вы писали:
S>3. Переборщик не ленив. Из генератора F#/C# я могу брать значения пока они удовлетворяют условию без создания лишних значений. Твой заполняет список значений при инициализации выражения, что опять таки не дает использовать его в целом классе задачь. Например, генерировать сильный пароль по заданной функции силы...
ОТкуда следует неленивость переборщиков? Из того, что в альфе они реализованы как массивы? Ну так не проблема же сделать их ленивыми уже в бете...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, ambel-vlad, Вы писали:
AV>Кстати, тут мысля еще одна возникла. 1..10 — это массив. Но это массив целых чисел. А как мне сделать массив чисел с плавающей точкой или массив строк?
Например так: ('мама', 'папа', 'дед')
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
AV>>С какой стати "плачу только за то что запросил" привязано к императивным языкам? Да и насчет "уйти от императивной стороны вопроса" как-то плохо у автора получается. E>Ну просто его на слабо тут разводят...
Никто его на слабо не разводит.
E>А могли бы помочь человеку, вместо того, чтобы издеваться
Пробовали помогать. Неоднократно. Но это все время наталкивалось на весьма специфическую реакцию.
Здравствуйте, samius, Вы писали:
S>Куда там до Вирта и Страуструпа, твой язык еще до детища Курта и Кемени не достал по функциональности.
Вот у тебя нету сути понимания вопроса. Что здесь первично, что вторично.
Какие приоритеты в языке. Что действительно сложно.
Нет выставленных приоритетов. Вот спроси тебя — зачем в языке функции ?
И я уверен, что ты не знаешь ответ на этот простой вопрос.
Ты не задумываешся над этим и твой аргумент
будет ... нуууу ... потому что их уже сто лет используют ?
Ты думаешь что библиотеки и функциональность в языке это самое сложное и закидываешь мне "сложность реализации".
Да не могут потопить язык такие тривиальные вещи, они не реализовываются потому что они не интересны на данном
этапе и ведется поиск более эффективных вещей.
Есть решения и получше, но эти решения находят люди, которые видят суть вещей в языкостроении,
а не тягают бездумно плюшки со всех книжек которые прочитали еще вчера.
"Вся страна играть в футбол умеет, лишь мы 11 человек играть не умеем"(с)КВН
Здравствуйте, samius, Вы писали:
S>Изменишь условие? Это другая задача. Кстати, образованные люди называют ее числом размещений. S>Есть несложный рекурсивный алгоритм получения всех размещений. В твоем языке на рекурсию табу, значит решение будет гораздо сложнее.
Рекурсия -- это ход в кусты. Если мы хотим уметь описывать переборщики строк, то что нам толку с того, что легко написать какую-то рекурсивную программу? Вложенные циклы тоже легко написать. Но неинтересно.
S>Ты за неделю так и не представил ни одно работающее решение, куда там за 30 сек получить размещения из случайной выборки!!!
Если хочешь, я тебе прямо сейчас представлю. Напишу формальное описание языка RS' и напишу программу на нём. Только если тебе нужен ещё и интерпретатор, то его напишешь ты? Оки?
S>еще и обижаешься на тех кто это подмечает.
Я вот всё не пойму. Зачем вы втроём пытаетесь убедить PC_2 в том, что он дурак? Он же всё равно вам не поверит, и будет прав...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, kochetkov.vladimir, Вы писали:
KV>WriteLine(p( KV> $['a'..'z'], KV> 6, KV> x => if (x.Head != 'a' && x.Length > 3) x.FirstN(2) else x KV> ) KV>); KV>[/nemerle]
KV>Заметьте, теперь мы можем передавать в p() произвольную функцию f, по которой сможем добавить любые ограничения к выходному списку.
Дык в RS это уже сейчас ЛЕГКО доступно.
Если у тебя есть переборщик строк Q, и есть предикат My, то профильтрованный переборщик будет (My(Q)?Q)
Тут я предполагаю, что вызов функции будет My(Q)...
KV>Не, че-то не разбивается. Напротив, чем обширнее и комплекснее будут исходные условия, тем больше вас придется хардкодить в интерпретаторе, чтобы избежать нагромождения кучи неудобочитаемого кода. Который, к тому же, не является повторно используемым. Решение же на nemerle будет усложняться только в той строчке, где определяется функция, реализующая ограничивающее условие.
Владимир. Я вот тоже не пойму, что и кому ты хочешь доказать. Тебе вообще не стыдно, ну так, если подумать кто тут модер, умный, опытный и грамотный собеседник, а кто не тянет на, как ты там сказал, "квалифицированных программистов", да?
Вроде такая фигня прямо запрещена тут в правилах. Может ты как модератор будешь направлять обсуждение в конструктивное русло, а не в сторону довольно глупой пенисометрии?..
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
AV>>Зачем? Да хотя бы затем, что предложенное автором извращение намного хуже. И от него он отказываться не намерен. E>Слушай, мне правда не интересно обсуждать особенности личности ТС.
А толку обсуждать RS если автор на все плюет и всех объявляет ламерами и т.д.
E>Охота обсуждать RS -- добро пожаловать. Не охота? -- ну и чего тогда обсуждать?
А что, использование List comprehension уже стало обсуждением личности? Или фраза про предложенные автором извращения вместо List comprehension уже не относится к обсуждению языка?
E>Ты, собственно, что мне хочешь даказать-то? Или в чём убедить?
Тебе? Ничего.
AV>>Как мелкий? Он же за краткость. А тут получается наоборот. ";" в два раза короче "E ". Но вроде он уже отказался от своего Е E>Почему короче? Какая разница в конце оператора волшебный символ или в начале?
Вначале или в конце, действительно разницы нет. А вот ";" в два раза короче "Е ". Что противоречит страстному желанию автора.
Здравствуйте, Erop, Вы писали:
AV>>Кстати, тут мысля еще одна возникла. 1..10 — это массив. Но это массив целых чисел. А как мне сделать массив чисел с плавающей точкой или массив строк?
E>Например так: ('мама', 'папа', 'дед')
Ооо, это что, еще один вариант объявления массива уже появился? Кстати, если это единственный вариант объявления массива строк, то ну его к черту. Потому что я могу и не знать эти "мам", "пап" и остальных родственников. Я все таки предпочитаю разделять объявление массива и его использование.
Здравствуйте, PC_2, Вы писали:
AV>>Не знаю где ты видел таких нормальных программистов и архитекторов, но я такое желание чаще всего встречаю у людей только ступивших на стезю программирования.
PC_>Потому что переписывание кода ведет элементарно к потраченому ( потраченому не в плане бесполезности ) PC_>времени и новым багам. PC_>Поэтому в опытной комманде стараются до последнего поддерживать старый код.
Вот только даже когда код переписывается, то ни разу не видел, чтобы первоочередной задачей было уменьшение кода.
PC_>Но любой программист знает, что любое переписывание системы видет к укорочению кода, к его компактности и PC_>улучшению его понимания.
К улучшению понимания? Да. К укорочению кода? Совсем не факт.
PC_>И предпологать что простота кода ( собственно то, каким этот код должен быть, это его идеальное состояние ) PC_>и его компактность это НЕ ортогональные понятия.
Вообще-то ты практически с первых сообщений начал утверждать, что чем компактнее код, тем он проще. Так что именно тебе доказывать свои утверждения. И если ты не заметил, то уже не один человек тебе в том или ином виде говорит про эту ортогональность.
Кстати, насчет компактности и простоты кода. Я вчера тебе предложил одну маленькую задачку про два массива. Что-то от ты решения не предоставил. Я готов предоставить код человека, который только начал было работать с Питоном. Вот можно было бы сравнить какой код проще
Здравствуйте, Erop, Вы писали:
E>ОТкуда следует неленивость переборщиков? Из того, что в альфе они реализованы как массивы? Ну так не проблема же сделать их ленивыми уже в бете...
Ленивость есть уже в альфе, хотя может и в зачаточном состоянии.
Например вот такое выражение
(1<2) ? 1+1 : 2+3+4+8+10+34
выражение
2+3+4+8+10+34 даже не пытается вычислять,
тоже с логическими операторами.
1==1 | (a + b == 1)
Первая часть выражение Тру, и вторая часть просто не вычисляется ...
выражение автоматом тру
"Вся страна играть в футбол умеет, лишь мы 11 человек играть не умеем"(с)КВН
Здравствуйте, Mamut, Вы писали:
M>Вы явно клоны.
Долго думал над этой версией?
Как ты думаешь, кто из пользователей фейковый?
M>Твои сообщения получают положительные оценки и конструктивное общение от PC_2, содержащие такие же умные слова от меня, samius'а и владимира кочеткова — швыряние какашками
Да? Объясни, что было конструктивного в твоём сообщении о том, что для того, чтобы ввести в язык RND PC_2 понадобилось её как-то назвать?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, samius, Вы писали:
S>>Извини, но для задачи "взять 5 случайных букв" тут слишком много рассуждений, все поскипал. E>Во-первых, рассуждения о том, как перебрать все пятибуквенные строчки, а не как получить строку случайных символов...
Еще раз извини, пропустил переход к следующей задаче
E>Строк случайных символов выглядит так: E>(1..5;('a'..'z').R)\+ E>Читается так: пять независимо взятых случайных букв объединить путём конкатенации. Что тут сложного?
Согласно традициям РС я бы это понял как декартово произведение, свернутое по +.
Проблема в том, что концепция R не очень ясна в этом выражении. От переборщика его отличает то что он безмерен. Можно предположить что получим в результате что-то плоское. Но природа элемента этого плоского опять таки не ясна. Я бы предположил что там tuple, но в языке его нет. Почему там будут буквы, а не числа?
Вопросов слишком много о таком выражении.
E>Во-вторых, рассуждения не про то, как записать, а про то, что УЖЕ есть в RS для решения такой задачи, а чего ещё не хватает.
Я уже писал что не хватает управляющих конструкций (хотя бы LC), комбинаторов, рекурсии.
S>>Если чуть покумекать и сделать генератор rnd, то так: S>>
Для такой записи рекурсия не нужна, но это не значит что она вообще не нужна.
E>Ну ты всего лишь воспользовался двумя библиотечными функциями. E>Одна -- это RND, а вторая -- это Take.
В отличии от РС, эти функции я могу написать сам. и восмользоваться ими. В других языках есть средства для этого. В том же C++ можно это сделать. E>Как ты понимаешь, RND мы тут не обсуждаем сейчас, так что весь вопрос в том, как мы запишем итерацию.
Я знаю несколько форм записи итераций — циклы, рекурсия, комбинирование генераторов, комбинирование наблюдателей. Первая пара и вторая пары — это дуализмы. Когда я понял что решили сделать упор на генераторы, а не на функции, то привел решение на генераторах. Но если функций не будет вообще, то и комбинаторы будет комбинировать нечем E>Ну ты записал прикольно -- вызвал функцию. Ты, как бы вызывал из библы, а я-то написал
Для меня нет никакого интереса писать самому, если есть библиотечное решение. Более того, если я что-то раз написал, с вероятностью 90% я это смогу реюзнуть. Я пишу относительно обобщенный код. E>Мы же язык хотим придумать, а не библиотеку?
Язык, не позволяющий создавать библиотеки — не нужен. Если мне сейчас скажут что в РС не будет библиотек — единственная цель с которой я тут останусь — доставать ТС-а.
E>При этом написано куча ненужной какой-то хрени. Хачем тут Select, например? Не в смысле "зачем это в С#", а в смысле "зачем в задаче <<взять пять случайных букв подряд>>" нужен вообще какой-то Select?
Это отображение последовательности случайных чисел в символы. считай что это map (не контейнер из stl, а глагол "отображать"). Просто в Linq-е решили поглумиться и сделали SQL подобное название для функции "отобразить". Очень неудачно. Но могу заверить, что прямая аналогия этому методу в F#, Haskell, OCaml и т.п. язках — это map.
E>>>Очевидно, что C -- это переборщик однобуквенных строк. Для того, чтобы пербрать двухбуквенные, надо сделать как-то так: E>>>!D = C; E>>>C+D S>>Это очень не очевидно
E>Почему? Чтобы проитерировать множество пар букв, нам надо два независимых итератора, по одному, на каждую букву... E>Это аналог такого C++ кода:
for( char C = 'a'; C <= 'z'; C++ ) {
E> for( char D = 'a'; D <= 'z'; D++ ) {
E> OutPair( C, D );
E> }
E>}
Нет, не согласен. Сложение генераторов отождествляется с операцией concat (последовательное склеивание последовательностей). На C++ у тебя написан zip. Не согласен с выбором символа для операции.
S>>Для того что бы взять 5 букв надо рассуждать о пятимерном гиперкубе? E>Ну так перебор пяти независимых букв -- это перебор точек в гиперкубе...
В контексте задачи о размещениях — да, согласен. E>Вы в институте тензоры не проходили, что ли? Ну если не проходили, то можно без гиперкубов ту же мысли выразить.
Проходили, просто я думал о другой задаче когда отвечал. Еще раз извини. E>Нам нужно пять независимых переборщиков, что будет соответствовать пяти вложенным циклам в С# или С++, например...
+1 E>Так же, как выше перебор пар, а не пятёрок, был эквивалентен перебору точек квадарата, или двум вложенным циклам. E>>>Я нисколько не настаиваю на такой именно записи, но возможность прикольная. Как записать -- стоит обсудить. В любом случае получаем, что записать переборщик, который перебирает клетки таблицы
будет выглядеть так: C#m
Пусть
E>Тут я, конечно, прогнал. Перебирает он не клетки, а пятёрки клеток, по клетке в строке.
не важно в процессе поиска решения
E>>>Тогда ПОЛНОЕ описание будет таким: E>>>!m=1..5 E>>>('a'..'z')#m/m/+
Плохо то, что это решение размещений с повторениями, а нам нужно без них.
S>>А на C# я написал, что я хочу получить. Пусть там много букв, но решение очевидно и понятно джуниору. E>Тут тоже понятно. Записано: берём пять независимых переменных, каждая из которых пробегает все буквы латинского алфавита, перебираем все варианты и для каждого сочетания вариантов возвращаем конкатинацию из этих пяти букв. И никаких селектов, или параметров циклов и т. д... И для того, чтобы из одной переменной сделать пять мы не библиотечной функцией пользуемся, а прямо записываем эту операцию на языке...
Для размещений с повторами — да нужны N вложенных циклов, которые удалось записать складыванием переборщиков. Это правильно.
Но только повторов быть не должно по условию.
Можно конечно отфильтровать результат — но это не спортивный ход.
S>>сделать функциональные языки?я И ты туда же? Может ты в совершенстве постиг парочку, что собрался сделать их eval-ом? E>Я писал одно время на лиспе, например. А для прототипирования сложных логических конструкция пользуюсь прологом, например.
E>А вообще, в советское время у меня как-то был диплом, вполне официальный, в котором были перечислены языки, которые я знал, и сдал по ним экзамен. Там было языков 10 где-то. Я уже точно не помню, и большинство из тех языков уже не особо популярны. Например фокал и форт можно считать, что почти померли
О фокале я слышал только название. Форт видел, но изучить не пришлось, к сожалению.
E>Но как это всё связано с тем, что eval -- пока рано раскуривать в RS?
Eval дает хорошие возможности по комбинированию вычислений. Но я считаю что прежде всего нужно озадачиться управляющими конструкциями и вывести язык на уровень хотя бы теоретической возможности решения всех задач, в том числе итеративных с окончанием итераций по условию (про разные возможности записи итераций я писал выше). Это надо сделать, а потом закинуть если не интересно развивать в этом направлении. Но пока этого нет — язык скуден до безобразия. Это во-первых.
Во-вторых — будь у тебя средство комбинирования счетчиков как ты привел выше (для задачи размещений с повторениями), стал бы ты использовать Eval для решения этой задачи?
Так вот, во многих языках с богатыми возможностями композиции кода Eval просто не нужен. А может я просто не умею его готовить. Да и не люблю, честно говоря, в рантайме генерить код без серьезной необходимости.
AV>А что, использование List comprehension уже стало обсуждением личности? Или фраза про предложенные автором извращения вместо List comprehension уже не относится к обсуждению языка?
А зачем нужен List comprehension в РС если не на одном из приведенных примеров не один из вас не на одном
из тестов не смог представить код короче и гибче и проще ( хоть последнее и субьективно ) ??
Еще раз, если вы лобируете какойто велосипед в языке, то никто не будет это добавлять
только потому что вам лично захотелся этот велосипед по религиозным соображениям.
"Вся страна играть в футбол умеет, лишь мы 11 человек играть не умеем"(с)КВН
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, samius, Вы писали:
S>>3. Переборщик не ленив. Из генератора F#/C# я могу брать значения пока они удовлетворяют условию без создания лишних значений. Твой заполняет список значений при инициализации выражения, что опять таки не дает использовать его в целом классе задачь. Например, генерировать сильный пароль по заданной функции силы...
E>ОТкуда следует неленивость переборщиков? Из того, что в альфе они реализованы как массивы? Ну так не проблема же сделать их ленивыми уже в бете...
Проблема. В текущем дизайне языка в их ленивости смысла нет, т.к. они по природе своей проходят от начала диапозона до конца и не останавливаются посередине. Сделаешь их ленивыми — они все равно не смогут остановиться.
E>ОТкуда следует неленивость переборщиков? Из того, что в альфе они реализованы как массивы? Ну так не проблема же сделать их ленивыми уже в бете...
ambel-vlad! Как к тебе обращаться по-русски? Влад?
Что тебе кажется смешным? Ты правда не знаешь, как переборщики сделать ленивыми?
Если будет за что бороться, то легко довольно реализовать в интерпретаторе что и как делать в зависимости от того, какая архитектура -- допускающая массовый параллелилизм или нет? Или, хотя бы, не массовый...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском