
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.218] |
![]() |
|
Страницы: (33) « Первая ... 21 22 [23] 24 25 ... 32 33 ( Перейти к последнему сообщению ) |
Сообщ.
#331
,
|
|
|
Ага, список из трех элементов будет Cons<Cons<Cons<A>>.
|
Сообщ.
#332
,
|
|
|
![]() |
Сообщ.
#333
,
|
|
|
Цитата D_KEY @ Что тебя так поразило? ![]() |
Сообщ.
#334
,
|
|
|
Да все
![]() Я пока со стороны посмотрю. |
Сообщ.
#335
,
|
|
|
Цитата D_KEY @ Ну а что ты хочешь? Я тороплюсь, на жабе отродясь не кодил. Да все ![]() Я пока со стороны посмотрю. Добавлено Окай, с жабой я сфейлился. Но вот никак не могу достигнуть дзен. Все равно, какое-то ощущение, что что-то где-то не так. |
Сообщ.
#336
,
|
|
|
Цитата D_KEY @ Я пока со стороны посмотрю. Вот это fail, йащитаю. |
Сообщ.
#337
,
|
|
|
Не выходит каменный цветок. Данная задача решается на D только с некоторыми допущениями (нескрываемое и поэтому легко ломаемое стирание типов). Считать ли эти допущения критическими для этой задачи или нет - пусть каждый решает сам для себя. На этом предлагаю данную тему закрыть до очередного зуда в заднице.
|
Сообщ.
#338
,
|
|
|
Цитата applegame @ Не выходит каменный цветок. Данная задача решается на D только с некоторыми допущениями (нескрываемое и поэтому легко ломаемое стирание типов). Считать ли эти допущения критическими для этой задачи или нет - пусть каждый решает сам для себя. Задача и без допущений практически бесполезна в реальной жизни(однако хорошо иллюстрирует разницу между параметрическим полиморфизмом и генерацией кода). А уж с допущениями она теряет всякий смысл. Мы холивар о ПП тоже заканчиваем? Жаль, мне бы хотелось получить ответ на мои последние вопросы на этот счёт... |
Сообщ.
#339
,
|
|
|
Цитата D_KEY @ fixed.однако хорошо иллюстрирует разницу между реализациями параметрического полиморфизма Цитата D_KEY @ Твои последние вопросы повторяются. Мы ходим по кругу. Давай лучше обобщим сказанное.Мы холивар о ПП тоже заканчиваем? Жаль, мне бы хотелось получить ответ на мои последние вопросы на этот счёт... Все участвующие в споре знают как работают шаблоны. Но одна сторона считает это параметрическим полиморфизмом, а другая нет. Остается только аппелировать к общественному мнению. Чуть менее, чем во всех источниках декларируется, что C++ поддерживает параметрический полиморфизм. Если бы можно было организовать суд, то у меня есть веские основания считать, что ты бы его проиграл. |
Сообщ.
#340
,
|
|
|
Цитата applegame @ Твои последние вопросы повторяются. Мы ходим по кругу. Эти я еще повторить не успел: Цитата D_KEY @ Qraizer, applegame Тут есть параметрический полиморфизм? ![]() ![]() class A { public: virtual void foo() { // default implementation } }; void bar(A & a) { a.foo(); } А если нет, то можете объяснить принципиальную разницу с шаблонами(в контексте нашего разговора, естественно)? Ведь ваш аргумент на счет "не специализируй" работает и тут ![]() Цитата Чуть менее, чем во всех источниках декларируется, что C++ поддерживает параметрический полиморфизм. Можно пример? |
![]() |
Сообщ.
#341
,
|
|
Его там нет, потому что нет компайл-тайм типов. Убери из D/Java/C# шаблоны/дженерики и используй везде Object. Сравни дженерик-TList в делфе (параметризуется типом элементов) и TStringList (ничем не параметризуется, тип элемента задан жестко --- TObject). |
Сообщ.
#342
,
|
|
|
Цитата D_KEY @ В гугле забанили?Можно пример? English Русский Цитата Wikipedia:RU Затем есть два способа реализации параметрического полиморфизма (в С++-сообществе обычно называемого «обобщённым программированием»). Первый способ унаследован из Си — использование бестипового указателя и приведение типа в зависимости от других данных — хотя в С++ этот способ традиционно считается неидеоматичным и опасным. Второй заключается в использовании шаблонов — но, в отличие от обычных реализаций параметрического полиморфизма, в С++ происходит автоматическая генерация семейства перегруженных мономорфных функций на основании полиморфного определения (шаблона) в соответствии с контекстами его использования — то есть параметрический полиморфизм на уровне исходного кода транслируется в ситуативный (ad hoc) на уровне машинного, за что С++ подвергается критике Цитата Wikipedia:EN Templates in C++ provide a sophisticated mechanism for writing generic, polymorphic code (i.e. parametric polymorphism). In particular, through the Curiously Recurring Template Pattern, Добавлено Цитата korvin @ Типы вообще тут не причем. Сишная функция printf параметрически полиморфна, как бы вам с D_KEY не хотелось обратного. Его там нет, потому что нет компайл-тайм типов. |
![]() |
Сообщ.
#343
,
|
|
Цитата applegame @ Еще раз читаем определение ПП, вдумчиво пожалуйста и ищем там хоть какое-то упоминание динамической/статической типизации, run-time или compile-time: Рукипедия, она такая, да. Цитата In programming languages and type theory, parametric polymorphism is a way to make a language more expressive, while still maintaining full static type-safety. Цитата Parametric polymorphism was first introduced to programming languages in ML in 1975. --- заметь, не в Лиспе 1958-го. https://en.wikipedia.org/wiki/Parametric_polymorphism |
Сообщ.
#344
,
|
|
|
Цитата D_KEY @ Функция bar - полиморфна, так как может принимать не только тип A, но и всех его потомков. А если нет, то можете объяснить принципиальную разницу с шаблонами(в контексте нашего разговора, естественно)? Добавлено Цитата korvin @ Переведи фразу на русский - зто не определение ПП.Рукипедия, она такая, да. Цитата korvin @ И что дальше? Введение обособленного понятия параметрического полиморфизма не нужно для динамически типизированных языков. --- заметь, не в Лиспе 1958-го. |
![]() |
Сообщ.
#345
,
|
|
Цитата OpenGL @ Не понял задачу. Как во время компиляции можно определить длину списка, которая известна только в рантайме? Имхо, задача поставлена некорректно. Не проверить длину списка,а гарантировать, что у двух списков одинаковая длина. Рекомендую посмотреть пример на Agda и почитать описание как и почему оно работает. Добавлено Цитата applegame @ Типы вообще тут не причем. Сишная функция printf параметрически полиморфна, как бы вам с D_KEY не хотелось обратного. ![]() Цитата In programming languages and type theory, polymorphism (from Greek πολύς, polys, "many, much" and μορφή, morphē, "form, shape") is the provision of a single interface to entities of different types. --- https://en.wikipedia.org/wiki/Polymorphism_...mputer_science) Про сишный printf --- клиника, там вообще нет типов и типобезопасности (для чего полиморфизм и нужен в т.ч., особенно параметрический). Добавлено Цитата JavaScript is dynamically duck typed. Generics don't make sense in that context. There aren't static types. It being supported or not is nonsensical. --- http://stackoverflow.com/questions/6697832...6697862#6697862 Цитата Parametric Polymorphism is a way to define types or functions that are generic over other types. The genericity can be expressed by using type variables for the parameter type, and by a mechanism to explicitly or implicitly replace the type variables with concrete types when necessary. Write a small example for a type declaration that is parametric over another type, together with a short bit of code (and its type signature) that uses it. A good example is a container type, let's say a binary tree, together with some function that traverses the tree, say, a map-function that operates on every element of the tree. This language feature only applies to statically-typed languages. --- http://rosettacode.org/wiki/Parametric_polymorphism |