Сообщение Re[36]: «Собаку съел» от 19.02.2017 11:12
Изменено 19.02.2017 11:29 vdimas
V>>>>Без поддержки перегрузки ф-ий не бывает ad hoc.
S>>>приведение — ad hoc.
V>>Приведение чего куда?
S>Приведение типа значения к типу аргумента функции.
Из вики:
приведение типов не является истинным полиморфизмом: кажется, будто оператор принимает значения множества типов, но значения должны быть преобразованы к некоторому представлению до того, как он сможет их использовать.
V>>>>Рядом уже показал в общей классификации систем типов, что "полиморфизмом" называют лишь "зависимые ф-ии" и ничего более.
S>>>Одна мономорфная функция + аргументы разного типа — уже полиморфизм.
V>>Противоречишь сам себе.
V>>Полиморфизм — это возможность подавать аргументы разного типа на одну и ту же ф-ию.
S>ИИИИ?
И всё. Приведение аргументов происходит ВНЕ функции. Сама функция об это не знает.
S>// На одну и ту же ф-ию
S>Foo(42); // подали int
S>Foo(42f); // подали float;
S>Полиморфизм! Где противоречие?
Твои примеры эквивалентны вот этому:
double d1 = 42;
Foo(d1);
double d2 = 42f;
Foo(d2);
Потому что "под капотом" именно это и происходит.
Ad hoc есть, полиморфизма нет. ))
V>>Это и есть определение "полиморфизма". Не ad hoc и не параметрического, а как такового.
S>Я про пример вызова мономорфной функции с разными типами. По Стрэчи это ad-hoc, тк. работает для ограниченного множества типов и требует специального кода для приведения.
По-моему, ты злостно искажаешь Стрэтчи:
Многие языки программирования предоставляют синтаксический механизм для назначения нескольким мономорфным функциям единого имени (идентификатора).
В этом случае, в исходном коде становится возможным осуществлять вызов функции с фактическими параметрами разных типов, но в скомпилированном коде фактически происходит вызов различных функций (см. перегрузка процедур и функций). Стрэчи назвал такую возможность «ad hoc полиморфизмом».
S>>>>>А классификация (по Стрэчи) предыдущим разделом. Там же указано что ограничение типа аргумента классом типа — есть ad-hoc.
V>>>>Это ошибка. Или самого Стрэчи или ты вырвал пример из контекста.
S>>>Это классификация самого Стрэчи.
V>>Можно целиком?
S>Можно, но не нужно сюда целиком раздел копировать.
Ну вот выше цитата по твоей ссылке.
V>>Потому что есть вероятность, что будет как с тем отрывком из Хаскель-вики.
S>Я думаю что она стремится к 1.
V>>И опять ты торопишься.
V>>Если ты не правильно понял — я тебе покажу это.
S>Где-то месяц уже пытаешься
Я только 3 сообщения назад увидел, а чем разногласия.
Т.е., увидел, что мы под одним и тем же подразумеваем разное.
До этого я исходил из того, что подразумеваем одно и то же.
Тебе стоит или показать, что именно привело тебя к такому выводу:
"ограничение типа аргумента классом типа — есть ad-hoc полиморфизм".
Или уже сделать над собой усилие и поменять для себя смысл этого термина.
Неужели сам не увидел, что будучи сформулирированным именно таким образом оно означает, что объявление любой мономорфной ф-ии точно так же "есть ad hoc полиморфизм". ))
V>>Если Стрэчи ошибается — я тоже легко это покажу.
S>Наверное, так же легко.
Ес-но, если дашь цитату, из которой ты сделал вот тот свой вывод.
Ключевое-то слово было "если". ))
V>>А вот эти вещи насчет "зеленого" давай оставим, плиз.
S>хорошо. Но если бы ты дал определение, а потом спустя 50 лет чел бы сказал что ты не прав, так не приведя альтернативного, то как бы ты отнесся к тому что ты бы стал не прав?
Ну это уже наезд... ))
Как раз таки я всегда требуют от оппонентов конструктивной критики и сам критикую только так.
Т.е., если не согласен — даю свой вариант.
Если что-то не устраивает — предлагаю альтернативы.
V>>ИМХО, ты всё еще пытаешься жульничать, хотя я уже несколько раз на это отвечал:
V>>единичная ф-ия с аргументом конкретного типа или класса типов — это не есть признак ad hoc, но это и не есть признак отсутствия ad hoc.
S>Жаль, количество твоих ответов не переходит в качество.
Тю, так это не наезд, а действительное непонимание, что ле?
Ключевое выделил:
единичная ф-ия с аргументом конкретного типа или класса типов — это не есть признак ad hoc, но это и не есть признак отсутствия ad hoc
Многие языки программирования предоставляют синтаксический механизм для назначения нескольким мономорфным функциям единого имени (идентификатора). В этом случае, в исходном коде становится возможным осуществлять вызов функции с фактическими параметрами разных типов...
Стрэчи назвал такую возможность «ad hoc полиморфизмом»
V>>И сколько раз мне еще надо повторить, что признаком ad hoc является наличие более одной "версии тела" одной и той же ф-ии?
S>Сколько угодно, пока ты не убедишь, что твоя классификация лучше чем у Стрэчи.
Это и есть классификация Стрэчи.
S>Пока ни одного аргумента не было.
Прямое вранье.
V>>И сколько раз мне надо повторять, что признаком параметрического полиморфизма является возможность подавать на одну и ту же "версию тела" аргументы разных типов?
S>То же самое. Приведи классификацию, где это будет верно.
Привел неоднократно.
S>А то получается что ad-hoc через приведение типа — это уже параметрический.
Приведение типа является разновидностью ad hoc полиморфизма только по версии Карделли (по твоей же ссылке).
Стрэтч такого не задвигал.
И вики тоже с Карделли НЕ согласна, хотя приводит его классификацию (в кач-ве ознакомительной информации, вестимо).
V>>Именно поэтому лямбда-исчисление называет ф-ией такую ф-ию, у которой строго один аргумент. А все остальные варианты (кроме 0-ля аргументов) в рамках этого исчисления сначала приводятся к варианту с 1-м аргументом, а потом уже идут остальные рассуждения.
S>Давай рассуждать о функциях с одним аргументом — кортежем. Если так будет проще рассуждать.
Можно и так. Главное, чтобы ф-ия зависела от одного типа единственного аргумента.
Т.е., кортеж — это тип, ОК.
Просто далеко не во всех языках кортеж аргументов — это тип.
S>Но я не замечал что кто-то из нас (с тобой) пытается соскочить за счет числа аргументов.
Я и не обвинял тут никого в попытке соскочить через число аргументов.
Просто уточнял тот момент, что считать "перегрузкой ф-ии".
Итого, в исходном виде — это перегрузка такой ф-ии, у которой ровно один аргумент. Т.е. в лямбда-исчислении считается, что если мы объявляем "конкурирующую" специализацию ф-ии, то мы НЕ объявляем новую ф-ию, а добавляем специализацию к имеющейся. Прямо в этом месте и возникает ad hoc полиморфизм. И это не бог весть какой рокет-саенс, чтобы так долго упрямиться. ))
V>>>>Без поддержки перегрузки ф-ий не бывает ad hoc.
S>>>приведение — ad hoc.
V>>Приведение чего куда?
S>Приведение типа значения к типу аргумента функции.
Из вики:
приведение типов не является истинным полиморфизмом: кажется, будто оператор принимает значения множества типов, но значения должны быть преобразованы к некоторому представлению до того, как он сможет их использовать.
V>>>>Рядом уже показал в общей классификации систем типов, что "полиморфизмом" называют лишь "зависимые ф-ии" и ничего более.
S>>>Одна мономорфная функция + аргументы разного типа — уже полиморфизм.
V>>Противоречишь сам себе.
V>>Полиморфизм — это возможность подавать аргументы разного типа на одну и ту же ф-ию.
S>ИИИИ?
И всё. Приведение аргументов происходит ВНЕ функции. Сама функция об это не знает.
S>// На одну и ту же ф-ию
S>Foo(42); // подали int
S>Foo(42f); // подали float;
S>Полиморфизм! Где противоречие?
Твои примеры эквивалентны вот этому:
double d1 = 42;
Foo(d1);
double d2 = 42f;
Foo(d2);
Потому что "под капотом" именно это и происходит.
Ad hoc есть, полиморфизма нет. ))
V>>Это и есть определение "полиморфизма". Не ad hoc и не параметрического, а как такового.
S>Я про пример вызова мономорфной функции с разными типами. По Стрэчи это ad-hoc, тк. работает для ограниченного множества типов и требует специального кода для приведения.
По-моему, ты злостно искажаешь Стрэтчи:
Многие языки программирования предоставляют синтаксический механизм для назначения нескольким мономорфным функциям единого имени (идентификатора).
В этом случае, в исходном коде становится возможным осуществлять вызов функции с фактическими параметрами разных типов, но в скомпилированном коде фактически происходит вызов различных функций (см. перегрузка процедур и функций). Стрэчи назвал такую возможность «ad hoc полиморфизмом».
S>>>>>А классификация (по Стрэчи) предыдущим разделом. Там же указано что ограничение типа аргумента классом типа — есть ad-hoc.
V>>>>Это ошибка. Или самого Стрэчи или ты вырвал пример из контекста.
S>>>Это классификация самого Стрэчи.
V>>Можно целиком?
S>Можно, но не нужно сюда целиком раздел копировать.
Ну вот выше цитата по твоей ссылке.
V>>Потому что есть вероятность, что будет как с тем отрывком из Хаскель-вики.
S>Я думаю что она стремится к 1.
V>>И опять ты торопишься.
V>>Если ты не правильно понял — я тебе покажу это.
S>Где-то месяц уже пытаешься
Я только 3 сообщения назад увидел, как ты это понимаешь. ))
В общем, тебе или стоит показать, что именно привело тебя к такому выводу:
"ограничение типа аргумента классом типа — есть ad-hoc полиморфизм".
или уже сделать над собой усилие и поменять для себя смысл этого термина на общепринятый.
Неужели сам не увидел, что из твоей формулировки получается бредовое следствие, а именно — объявление любой мономорфной ф-ии точно так же "есть ad hoc полиморфизм".
V>>Если Стрэчи ошибается — я тоже легко это покажу.
S>Наверное, так же легко.
Ес-но, если дашь цитату, из которой ты сделал вот тот свой вывод.
Ключевое-то слово было "если". ))
V>>А вот эти вещи насчет "зеленого" давай оставим, плиз.
S>хорошо. Но если бы ты дал определение, а потом спустя 50 лет чел бы сказал что ты не прав, так не приведя альтернативного, то как бы ты отнесся к тому что ты бы стал не прав?
Я думаю, что ты сейчас безосновательно обвиняешь меня в неконструктивной критике, а это уже наезд. ))
Причем, наезд какой-то неожиданно ни к месту, ни на что не влияющий и никуда не ведущий.
И тем более нелепый, что все ходы-то записаны: у тебя не получится на этом форуме за все годы найти хоть один момент, где я бы, проявляя несогласие, не озвучивал бы альтернативного варианта.
V>>ИМХО, ты всё еще пытаешься жульничать, хотя я уже несколько раз на это отвечал:
V>>единичная ф-ия с аргументом конкретного типа или класса типов — это не есть признак ad hoc, но это и не есть признак отсутствия ad hoc.
S>Жаль, количество твоих ответов не переходит в качество.
Тю, так это не наезд, а в трех соснах заблудился, что ле?
Ключевое выделил:
единичная ф-ия с аргументом конкретного типа или класса типов — это не есть признак ad hoc, но это и не есть признак отсутствия ad hoc
Многие языки программирования предоставляют синтаксический механизм для назначения нескольким мономорфным функциям единого имени (идентификатора). В этом случае, в исходном коде становится возможным осуществлять вызов функции с фактическими параметрами разных типов...
Стрэчи назвал такую возможность «ad hoc полиморфизмом»
V>>И сколько раз мне еще надо повторить, что признаком ad hoc является наличие более одной "версии тела" одной и той же ф-ии?
S>Сколько угодно, пока ты не убедишь, что твоя классификация лучше чем у Стрэчи.
Это и есть классификация Стрэчи.
S>Пока ни одного аргумента не было.
Прямое вранье.
V>>И сколько раз мне надо повторять, что признаком параметрического полиморфизма является возможность подавать на одну и ту же "версию тела" аргументы разных типов?
S>То же самое. Приведи классификацию, где это будет верно.
Привел неоднократно.
S>А то получается что ad-hoc через приведение типа — это уже параметрический.
Приведение типа является разновидностью ad hoc полиморфизма только по версии Карделли (по твоей же ссылке).
Стрэтч такого не задвигал.
И вики тоже с Карделли НЕ согласна, хотя приводит его классификацию (в кач-ве сугубо ознакомительной информации, вестимо).
V>>Именно поэтому лямбда-исчисление называет ф-ией такую ф-ию, у которой строго один аргумент. А все остальные варианты (кроме 0-ля аргументов) в рамках этого исчисления сначала приводятся к варианту с 1-м аргументом, а потом уже идут остальные рассуждения.
S>Давай рассуждать о функциях с одним аргументом — кортежем. Если так будет проще рассуждать.
Можно и так. Главное, чтобы ф-ия зависела от единственного типа — от типа единственного аргумента.
Т.е., кортеж — это тип, ОК.
Просто далеко не во всех языках кортеж аргументов — это тип или вообще есть "кортеж".
В большинстве мейнстримовых такой "кортеж" надо объявлять явно — структуру в Паскале, С, С#. И так же явно использовать затем, т.е. возвращаемся к одному аргументу. ))
S>Но я не замечал что кто-то из нас (с тобой) пытается соскочить за счет числа аргументов.
Я и не обвинял тут никого в попытке соскочить через число аргументов.
Просто уточнял тот момент, что считать "перегрузкой ф-ии".
Итого, в исходном виде — это перегрузка такой ф-ии, у которой ровно один аргумент. Т.е. в лямбда-исчислении считается, что если мы объявляем "конкурирующую" специализацию ф-ии, то мы НЕ объявляем новую ф-ию, а добавляем специализацию к имеющейся. Прямо в этом месте и возникает ad hoc полиморфизм.
И да. Если уж начистоту... это не бог весть какой рокет-саенс, чтобы так долго упрямиться. ))