Информация об изменениях

Сообщение Re[36]: «Собаку съел» от 19.02.2017 11:12

Изменено 19.02.2017 11:29 vdimas

Re[36]: «Собаку съел»
Здравствуйте, samius, Вы писали:

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 полиморфизм. И это не бог весть какой рокет-саенс, чтобы так долго упрямиться. ))
Re[36]: «Собаку съел»
Здравствуйте, samius, Вы писали:

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 полиморфизм.

И да. Если уж начистоту... это не бог весть какой рокет-саенс, чтобы так долго упрямиться. ))