Здравствуйте, artelk, Вы писали: A>Если сделать макрос
… A>, то получится писать так: "lst.GroupBy(__)". A>Нельзя ли этот макрос добавить в стандартную библиотеку?
Название не очень. Но что у нас есть: раз — спрос в фиче, несомненно, есть; два — фича используется редко, сами сказали.
Посему, предлагаю пойтить простейшим и очевиднейшим путём: заиспользовать символ ≡ (Triple bar).
Этот символ в точности соответствует двум приведённым выше фактам.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>Посему, предлагаю пойтить простейшим и очевиднейшим путём: заиспользовать символ ≡ (Triple bar). _FR>Этот символ в точности соответствует двум приведённым выше фактам.
Тут уже как-то было обсуждение по поводу использования расширенного набора юникодных символов. Сошлись во мнении, что это создаст проблемы (например, при публикации кода на форумах где часто бывают проблемы с юникодом).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
_FR>>Посему, предлагаю пойтить простейшим и очевиднейшим путём: заиспользовать символ ≡ (Triple bar). _FR>>Этот символ в точности соответствует двум приведённым выше фактам.
VD>Тут уже как-то было обсуждение по поводу использования расширенного набора юникодных символов. Сошлись во мнении, что это создаст проблемы (например, при публикации кода на форумах где часто бывают проблемы с юникодом).
А три знака равенства "==="? Так можно назвать макрос? Или такой оператор уже где-то используется?
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
VD>>Тут уже как-то было обсуждение по поводу использования расширенного набора юникодных символов. Сошлись во мнении, что это создаст проблемы (например, при публикации кода на форумах где часто бывают проблемы с юникодом).
_FR>А три знака равенства "==="? Так можно назвать макрос? Или такой оператор уже где-то используется?
Назвать можно. В JavaSCript это строгое (с учетом типа) равенство объектов.
Здравствуйте, _FRED_, Вы писали:
_FR>А три знака равенства "==="? Так можно назвать макрос? Или такой оператор уже где-то используется?
Можно. Даже метод можно так назвать. Только поймет ли кто-то смысл этого?
Боюсь, что от подобных изысков будут одни проблемы. Экономии по сравнению с "x => x" почти нет. А вот чтобы понять это нужно знать что означает этот самый "===".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Экономии по сравнению с "x => x" почти нет.
Дело не в экономии. Любой значок для тождественного отображения лучше, чем явное указание лямбды, потому что обозначает всегда один и тот же экземпляр, а лямбда — теоретически разный.
Здравствуйте, _FRED_, Вы писали:
_FR>>>Посему, предлагаю пойтить простейшим и очевиднейшим путём: заиспользовать символ ≡ (Triple bar).
_FR>А три знака равенства "==="? Так можно назвать макрос? Или такой оператор уже где-то используется?
А почему именно «≡» или «===»? Здесь «identity» нужно понимать не как «тождественное равенство», а как «тождественное отображение», то бишь, единицу в соответствующем моноиде. «ℯ», например, если «id» не нравится :)
Здравствуйте, Qbit86, Вы писали:
Q>Дело не в экономии. Любой значок для тождественного отображения лучше, чем явное указание лямбды, потому что обозначает всегда один и тот же экземпляр, а лямбда — теоретически разный.
Хорошо, что у нас практический язык и библиотека, а не теоретический. В нем лямбды с одинаковым телом имеют одинаковый смысл.
В прочем, в теории это в точности так же.
Что до любого значка, то любой значок нужно изучать, а чтобы понять что означает "x => x" достаточно изучить понятие лямбда (без которого никуда).
Есть такой принцип "Бритава Оккама". Из него следует, что не надо плодить сущностей больше необходимого. Реальная необходимость в таком операторе есть? Очевидно — нет. Ну, так что делать финтифлюшки рада развлечения?
Сделать функцию Indentity в принципе можно, так как из самого названия будет ясно ее назначение. Но стоит ли? Тут уже количество лишних символов будет даже больше. А вот код будет читаться точно так же.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Qbit86, Вы писали:
Q>А почему именно «≡» или «===»? Здесь «identity» нужно понимать не как «тождественное равенство», а как «тождественное отображение», то бишь, единицу в соответствующем моноиде. «ℯ», например, если «id» не нравится
Вот именно. Народ уже путается.
Скажу больше. Людям не пораженным математикой головного мозга думать о сквозной функции как о моноидах вряд ли захочется.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Хорошо, что у нас практический язык и библиотека, а не теоретический. В нем лямбды с одинаковым телом имеют одинаковый смысл.
Нет. Если тебе в функцию приходит другая функция, то ты её можешь в целях оптимизации сравнить с существующим статическим экземпляром, скажем, Functions.Id. А если такой well known функции нет, то твоя лямбда вида x ↦ x будет не равна (ссылочно) такой же лямбде пользователя твоего API.
VD>Есть такой принцип "Бритава Оккама". Из него следует, что не надо плодить сущностей больше необходимого. Реальная необходимость в таком операторе есть? Очевидно — нет.
Здравствуйте, VladD2, Вы писали:
VD>Людям не пораженным математикой головного мозга...
Зря ты так. Математику нужно любить и изучать. Это наиболее достойная вещь для изучения.
VD>...думать о сквозной функции как о моноидах вряд ли захочется.
Какие ещё «сквозные функции»? Смысл выделения тождественной функции в том, что по отношению к операции композиции ∘ она является нейтральным элементом.
Здравствуйте, Qbit86, Вы писали:
Q>Нет. Если тебе в функцию приходит другая функция, то ты её можешь в целях оптимизации сравнить с существующим статическим экземпляром, скажем, Functions.Id.
Ок, в каких сценариях эта оптимизация будет играть заметную роль?
Здравствуйте, hardcase, Вы писали:
Q>>Нет. Если тебе в функцию приходит другая функция, то ты её можешь в целях оптимизации сравнить с существующим статическим экземпляром, скажем, Functions.Id.
H>Ок, в каких сценариях эта оптимизация будет играть заметную роль?
Скажем, надо численно проинтегрировать задаваемую пользователем функцию. В качестве оптимизации очень полезно будет поискать в табличке первообразных, где храняться предпросчитанные функции для Math.Id, Math.Sin, etc.
Здравствуйте, Qbit86, Вы писали:
VD>>Хорошо, что у нас практический язык и библиотека, а не теоретический. В нем лямбды с одинаковым телом имеют одинаковый смысл.
Q>Нет. Если тебе в функцию приходит другая функция, то ты её можешь в целях оптимизации сравнить с существующим статическим экземпляром, скажем, Functions.Id. А если такой well known функции нет, то твоя лямбда вида x ↦ x будет не равна (ссылочно) такой же лямбде пользователя твоего API.
Казалось бы я на русском языке говорю, а меня умудряются не понимать.
Сравнение функций, в общем случае, не разрешимая на практике задача. По сему в Н она попросту не решается.
Но это никак не влияет на тот факт, что одинаковые функции имеют одинаковый смысл (семантику). Этого более чем достаточно чтобы понимать, что x => x и y => y означают (и делают) одно и то же.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
Q>>Нет. Если тебе в функцию приходит другая функция, то ты её можешь в целях оптимизации сравнить с существующим статическим экземпляром, скажем, Functions.Id. А если такой well known функции нет, то твоя лямбда вида x ↦ x будет не равна (ссылочно) такой же лямбде пользователя твоего API.
VD>Казалось бы я на русском языке говорю, а меня умудряются не понимать.
Это ты меня не понимаешь.
VD>Сравнение функций, в общем случае, не разрешимая на практике задача.
Её не надо решать в общем случае. Нужно просто предоставить несколько важных частных. Тебя же не смущает присутствие члена String.Empty при наличии литерала ""?
VD>По сему в Н она попросту не решается.
Странная логика: если нечто не решается в общем случае, то и вообще забить? Кроме того, речь не столько про Н, сколько про .NET и вообще про API стандартных библиотек ФВП.
VD>Но это никак не влияет на тот факт, что одинаковые функции имеют одинаковый смысл (семантику).
Одинаковый смысл не отменяет того факта, что они ссылочно не равны, хотя могли бы, и это было бы полезно.
VD>Этого более чем достаточно чтобы понимать, что x => x и y => y означают (и делают) одно и то же.
Здравствуйте, Qbit86, Вы писали:
_FR>>>>Посему, предлагаю пойтить простейшим и очевиднейшим путём: заиспользовать символ ≡ (Triple bar).
_FR>>А три знака равенства "==="? Так можно назвать макрос? Или такой оператор уже где-то используется?
Q>А почему именно «≡» или «===»? Здесь «identity» нужно понимать не как «тождественное равенство», а как «тождественное отображение», то бишь, единицу в соответствующем моноиде. «ℯ», например, если «id» не нравится
Очень может быть, тут я не силён. Просто это первый символ, коорый пришёл мне в голову при необходимости обозначить некоторую идентичность. Про то, что такое «ℯ» я не в курсе, но выглядит это конечно лучше, чем оператор.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, VladD2, Вы писали:
_FR>>А три знака равенства "==="? Так можно назвать макрос? Или такой оператор уже где-то используется? VD>Можно. Даже метод можно так назвать. Только поймет ли кто-то смысл этого?
Да, тут загвоздка.
VD>Боюсь, что от подобных изысков будут одни проблемы. Экономии по сравнению с "x => x" почти нет. А вот чтобы понять это нужно знать что означает этот самый "===".
Согласен. Может быть, использоваь символ "=>"? Это конечно _немного более_ понятно. Справится ли парсер с этим?
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, hardcase, Вы писали:
VD>>>Тут уже как-то было обсуждение по поводу использования расширенного набора юникодных символов. Сошлись во мнении, что это создаст проблемы (например, при публикации кода на форумах где часто бывают проблемы с юникодом).
_FR>>А три знака равенства "==="? Так можно назвать макрос? Или такой оператор уже где-то используется?
H>Назвать можно. В JavaSCript это строгое (с учетом типа) равенство объектов.
Другими словами, тождественность, идентичность. Именно это я и имел в виду.
Help will always be given at Hogwarts to those who ask for it.