Re[5]: Какой полиморфизм используется в ФЯ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.10.04 08:19
Оценка:
Здравствуйте, beroal, Вы писали:

B>На самом деле вы оба правы. Статический/динамический относится к компиляции, следовательно, это варианты реализации полиморфизма. Потому что логика программы от этого не меняется. А ad-hoc и параметрический различаются по логике. Т.е. есть два варианта классификации полиморфизма (по логике и по реализации). Их действительно часто путают.


Собственно я говорил именно о "статический/динамический" и "ad-hoc и параметрический" не приплетал.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Какой полиморфизм используется в ФЯ?
От: Аноним  
Дата: 31.10.04 09:27
Оценка: -1
Здравствуйте, VladD2, Вы писали:

VD>Мне нужна нибкость при создание ГУИ. Чем тут мне поможет Лисп? Убогими библиотеками наспех прицепленными к его скобочкам? Да ни в жизни. А вот XAML решает пробелму на ура. Причем в нем даже есть некие функциональные черты. Хотя это скрее язык разметки.


Кстати, лисп в чистом виде. Только вместо кучи нормальных скобочек, которые тебе не нравятся, есть куча не нормальных,
которые тебе нравятся. Парадокс.
Re[3]: Какой полиморфизм используется в ФЯ?
От: Gaperton http://gaperton.livejournal.com
Дата: 01.11.04 11:32
Оценка:
Здравствуйте, beroal, Вы писали:

B>Здравствуйте, Gaperton, Вы писали:


G>>1) Существует два способа. Первый — параметрические типы (аналог шаблонов), и второй — АДТ (абстрактные типы данных, ближе всего к интерфейсам). Вроде как все знакомо.

G>>2) А вот здесь начинается самое интересное. Во-первых, для каждого типа (класса), соответствующего АДТ (реализующего интерфейс) надо явно указать набор функций, которые реализуют АДТ. Функции могут быть совершенно произвольными, в частности две разных реализации АДТ могут вообще говоря иметь пересекающийся набор функций. Что прикольно.
B>Категорически не согласен. Значит, метод write может выполнять чтение?
Нет, не значит. "могут вообще говоря" означает, что в общем случае, они не обязаны быть разными. И ничего кроме.
B>То есть сделать так можно, но не нужно.
А теперь насчет того, когда это нужно, а когда нет. Во первых, это позволяет просимулировать наследование реализации. Во вторых, есть ситуации, когда это просто спасает. Пример — есть много классов, с примерно одинаковыми данными, но немного разным прикладным смыслом. Классы состоят друг с другом в сложных отношениях. В этом случае так делать нужно.
Re[11]: Какой полиморфизм используется в ФЯ?
От: Gaperton http://gaperton.livejournal.com
Дата: 01.11.04 13:08
Оценка: +5
Здравствуйте, VladD2, Вы писали:

VD>А, ну, то есть я не понял. Так что же ты вместо того чтобы сказать, что я тебя не понял, и ты говоришь про патерн-матчинг, начал доказывать, что мултиметода — это норенная особенность ФЯ?

На всякий случай, когда тебе кажется, что кто-то написал глупость, вместо этого считай, что ты человека не понял. Неплохой индикатор непонимания, сильно не ошибешься. Не придется разводить флейм, упираться, и пытаться потом сохранить лицо. Потому как убедить тебя, что ты не понял, как показывает опыт, практически невозможно. Это первый на моей памяти случай.

VD>А у меня к тебе пробсьба общественно характера. Смени стиль общения. Прекрати постоянно пытаться задевать других людей.

Я постоянно это делать и не пытаюсь. Так скажем, я вообще не пытаюсь задевать других людей. Я реагирую на их посты. В чем может убедится каждый, посмотрев историю моих постов. И в чем ты можешь убедиться лично, выполнив мою просьбу и последовав предыдущему совету. Если тебя это сильно не затруднит, конечно.

VD>ЗЫ

VD>В общем, редлагаю не разводить здесь флэйм.
Нивапрос.
Re[12]: Какой полиморфизм используется в ФЯ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.11.04 16:31
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>На всякий случай, когда тебе кажется, что кто-то написал глупость, вместо этого считай, что ты человека не понял. Неплохой индикатор непонимания, сильно не ошибешься. Не придется разводить флейм, упираться, и пытаться потом сохранить лицо. Потому как убедить тебя, что ты не понял, как показывает опыт, практически невозможно. Это первый на моей памяти случай.


Тут оно как, всегда кто-то кого-то может непонять. И всегда это можно объяснить. А вот если в отвоет, начинать доказвать что-то другое, то конечно получается фигня.

Вот в данном случае ты как раз начал вещать о мултиметодах и довещался до полной ерунды. А из твоего исходного высказывания совсем не очевидно, что ты имел в виду не полиморфизм, а патрн-матчинг. Особненно это не очевидно в контексте данной темы. Ведь патерн-матчинг к полиморфизкму отношения не имеет. Это сдедство управления ветвлением вроде if/switch.

VD>>А у меня к тебе пробсьба общественно характера. Смени стиль общения. Прекрати постоянно пытаться задевать других людей.

G>Я постоянно это делать и не пытаюсь. Так скажем, я вообще не пытаюсь задевать других людей.

Судя по результатам у тебя это плохо получается.

G> Я реагирую на их посты. В чем может убедится каждый, посмотрев историю моих постов. И в чем ты можешь убедиться лично, выполнив мою просьбу и последовав предыдущему совету. Если тебя это сильно не затруднит, конечно.


Каждый и убеждается. И поверь убеждается именно в том, о чем я тебе говорю. А свои просбы тебе бы в первую очередь самому бы выполнять. Глядишь проблем было бы меньше.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Какой полиморфизм используется в ФЯ?
От: Gaperton http://gaperton.livejournal.com
Дата: 02.11.04 09:51
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>Вот в данном случае ты как раз начал вещать о мултиметодах и довещался до полной ерунды.

Не хами, модератор. Я уже устал учить тебя вежливости, но видимо придется опять — раз в семье не научили.

VD>А из твоего исходного высказывания совсем не очевидно, что ты имел в виду не полиморфизм, а патрн-матчинг. Особненно это не очевидно в контексте данной темы. Ведь патерн-матчинг к полиморфизкму отношения не имеет. Это сдедство управления ветвлением вроде if/switch.

Перечитай мой изначальный пост от начала до конца, внимательно. Посмотри примеры, которые я привел. Я не могу делать расшифровки каждого абзаца, подобные предыдущей, поэтому придется подумать самому, если конечно у тебя есть желание понять. В чем я лично сильно сомневаюсь. Потому, как ты опять не понимаешь. И самое смешное, еще пытаешься меня учить, что такое паттерн-матчинг . Смени, вобщем, стиль общения, утомляет.
Re[14]: Какой полиморфизм используется в ФЯ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.11.04 13:53
Оценка: -1
Здравствуйте, Gaperton, Вы писали:

VD>>Вот в данном случае ты как раз начал вещать о мултиметодах и довещался до полной ерунды.

G>Не хами, модератор. Я уже устал учить тебя вежливости, но видимо придется опять — раз в семье не научили.

Хамиш в данном случае ты. Причем с переходом на личности.

G>Перечитай мой изначальный пост от начала до конца, внимательно. Посмотри примеры, которые я привел.


Почитал очень внимательно. Понял, что ты, по-моему, в принципе не верно понимаешь термин полиморфизм. Патерн-матчинг ты принимаешь за полиморфизм. Именно по этому я тебя и не понял. Собственно вот определение из которого я исхожу http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29#Ad-hoc_polymorphism

G>Я не могу делать расшифровки каждого абзаца, подобные предыдущей, поэтому придется подумать самому, если конечно у тебя есть желание понять. В чем я лично сильно сомневаюсь. Потому, как ты опять не понимаешь.


Что же... если тебя постоянно не понимаю, то возможно ты просто плохо объясняшь? Ну, или ошибашся? В общем, это не повод для перехода на личности.

G>И самое смешное, еще пытаешься меня учить, что такое паттерн-матчинг .


Похоже что ты не верно понимаешь значения слова полиморфизм. Но боюсь вместо обсуждения этого в получить новую порцию оскарблений.

G>Смени, вобщем, стиль общения, утомляет.


Прекращай хамить и переходить на личность собеседника. Это форум не для нездов и разборок.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Какой полиморфизм используется в ФЯ?
От: Gaperton http://gaperton.livejournal.com
Дата: 02.11.04 15:09
Оценка: 3 (1) +1
Здравствуйте, VladD2, Вы писали:

G>>Перечитай мой изначальный пост от начала до конца, внимательно. Посмотри примеры, которые я привел.

VD>Почитал очень внимательно. Понял, что ты, по-моему, в принципе не верно понимаешь термин полиморфизм.
Плохо. Перечитай еще раз .

VD>Патерн-матчинг ты принимаешь за полиморфизм. Именно по этому я тебя и не понял.

Не думаю. Советую рассмотреть вариант, что ты принимаешь паттерн-матчинг за аналог операции ветвления в ИЯ. Вот поэтому ты меня не понял.

VD>Собственно вот определение из которого я исхожу http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29#Ad-hoc_polymorphism

Ну наконец-то, конструктивный разговор. Я исхожу из такого же определения. Прикольно, правда? А паттерн-матчинг я за полиморфизм не принимаю, это разные вещи. Применение паттерн-матчинга при задании аргументов функции — вот это является одним из самых мощных способов достижения полиморфизма в ФЯ.

Все эти определения могут быть даны одновременно, и в рантайме будет выбрано наиболее специфичное.
poly_function( { A, B } ) -> ...;
вызовется, если аргумент — структура из двух элементов.

poly_function( [ A, B ] ) -> ...;
вызовется, если аргумент — список из двух элементов. Разные типы, все в порядке, так?

poly_function( { A, { B, C } } ) -> ...;
вызовется, если аргумент — структура из двух элементов, а значение второго элемента — тоже структура из двух элементов. Что можно также понимать, как единое определение типа (такая хитрая структура) — пока все честно, не так ли?

Как видишь, мы уточнили ограничение на тип по сравнению с первой строкой. Теперь оно более специфично.
Паттерн матчинг, однако. И речь идет одновременно и о типах и о значениях. Теперь нам ничего не мешает поступить так:

poly_function( { A, { value_5, C } ) where A < C -> ...;
Почти тоже самое, но мы еще более сузили множество значений, при котором вызовется эта функция. Тип данных в частности однозначно определяется множеством значений этого типа, так что аргумент-паттерн можно также понимать как способ конструирования подтипов без их явного определения (!). С такой точки зрения мы не выходим за рамки классического определения полиморфизма. Если ты еще не понял, о чем я, то заметь, что на С++ я каждый вариант могу завернуть в свой подкласс, и написать совершенно такой же код, где poly_function будет являтся виртуальной функцией каждого подкласса. В ФЯ же я этого делать не обязан.

По сути дела, применяя паттерн-матчинг для спецификации аргументов, мы не просто задаем тип, как по классике. Мы накладываем ограничение на тип и значение аргумента, что позволяет нам произвольно варьировать подмножество объектов, на котором должна сработать выбранная функция. Это и обеспечивает нам более гибкий полиморфизм — то, что вместо простой спецификации типа аргумента мы в состоянии наложить на аргумент и его тип почти произвольное ограничение.

С некоторой точки зрения на полиморфизм и природу типов (такой как у тебя, например), подобное поведение выходит за рамки понятия "полиморфизм". С моей — нет. Здесь разница в слишком глубоких посылках, и философском подходе, чтобы так легко говорить, что кто-то "неверно понимает полиморфизм". Я бы выразился, что с моей точки зрения, ты понимаешь его узко — а именно в соответствии с его реализацией в распространенных ОО языках. Ну а свой взгляд на это явление, а также объяснение, почему это на мой взгляд не противоречит известному определению полиморфизма, я привел. Если непонятно, давай пообсуждаем.

G>>И самое смешное, еще пытаешься меня учить, что такое паттерн-матчинг .

VD>Похоже что ты не верно понимаешь значения слова полиморфизм. Но боюсь вместо обсуждения этого в получить новую порцию оскарблений.
Правильно боишься. Вежливый человек на твоем месте сказал бы "похоже, мы с тобой по разному понимаем значение слова полиморфизм". Вот в такой формулировке — да, есть что пообсуждать. А в твоей — обсуждать с тобой то, что я "не верно понимаю", мне не хочется. Потому как самый адекватный ответ на такую фразу — "сам дурак" . Но мы ведь вежливые люди, и не хотим разводить здесь флейм, не так ли? Поэтому я промолчу
Re[16]: Какой полиморфизм используется в ФЯ?
От: Sinclair Россия https://github.com/evilguest/
Дата: 03.11.04 10:10
Оценка: +1
Здравствуйте, Gaperton, Вы писали:
G>Ну наконец-то, конструктивный разговор. Я исхожу из такого же определения. Прикольно, правда? А паттерн-матчинг я за полиморфизм не принимаю, это разные вещи. Применение паттерн-матчинга при задании аргументов функции — вот это является одним из самых мощных способов достижения полиморфизма в ФЯ.

Ну, вообще-то определение полиморфизма в википедии все-таки работает с типами, а не со значениями. Таким образом, паттерн-матчинг является более мощной концепцией, чем ad-hoc полиморфизм, описанный в wiki. Во-первых, он сохраняет некоторые черты параметрического полиморфизма, в том смысле, что множество типов, с которыми может работать конкретная версия функции, не является конечным. Во-вторых, все-таки паттерн может использовать больше информации об аргументе, чем просто тип.

С абстрактно-философской точки зрения, тем не менее, я считаю трактовку паттерн-матчинга как средства достижения полиморфизма вполне корректной. Да, ты абсолютно прав: мы можем а) предоставить функцию для работы с аргументами независимо от их типа и б) автоматически выбирать реализацию функции в зависимости от ее аргументов.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[17]: Какой полиморфизм используется в ФЯ?
От: Nick_ Россия  
Дата: 03.11.04 11:24
Оценка: +2
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Gaperton, Вы писали:

G>>Ну наконец-то, конструктивный разговор. Я исхожу из такого же определения. Прикольно, правда? А паттерн-матчинг я за полиморфизм не принимаю, это разные вещи. Применение паттерн-матчинга при задании аргументов функции — вот это является одним из самых мощных способов достижения полиморфизма в ФЯ.

S>Ну, вообще-то определение полиморфизма в википедии все-таки работает с типами, а не со значениями. Таким образом, паттерн-матчинг является более мощной концепцией, чем ad-hoc полиморфизм, описанный в wiki. Во-первых, он сохраняет некоторые черты параметрического полиморфизма, в том смысле, что множество типов, с которыми может работать конкретная версия функции, не является конечным. Во-вторых, все-таки паттерн может использовать больше информации об аргументе, чем просто тип.


S>С абстрактно-философской точки зрения, тем не менее, я считаю трактовку паттерн-матчинга как средства достижения полиморфизма вполне корректной. Да, ты абсолютно прав: мы можем а) предоставить функцию для работы с аргументами независимо от их типа и б) автоматически выбирать реализацию функции в зависимости от ее аргументов.


Можно рассматривать не только с абстрактно-философской точки зрения. В системе типов Хиндли-Милнера тип — это множество значений. Таким образом, значение тоже является типом.
Re[17]: Какой полиморфизм используется в ФЯ?
От: Gaperton http://gaperton.livejournal.com
Дата: 03.11.04 12:31
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну, вообще-то определение полиморфизма в википедии все-таки работает с типами, а не со значениями. Таким образом, паттерн-матчинг является более мощной концепцией, чем ad-hoc полиморфизм, описанный в wiki. Во-первых, он сохраняет некоторые черты параметрического полиморфизма, в том смысле, что множество типов, с которыми может работать конкретная версия функции, не является конечным. Во-вторых, все-таки паттерн может использовать больше информации об аргументе, чем просто тип.


И это тоже зависит от точки зрения.
G>> Тип данных в частности однозначно определяется множеством значений этого типа, так что аргумент-паттерн можно также понимать как способ конструирования подтипов без их явного определения (!). С такой точки зрения мы не выходим за рамки классического определения полиморфизма.

S>С абстрактно-философской точки зрения, тем не менее, я считаю трактовку паттерн-матчинга как средства достижения полиморфизма вполне корректной.


Не такая уж она (точка зрения) абстрактно-философская. Паттерн-матчинг часто на практике применяется там, где в С++ пользуются виртуальными функциями. Перейдем от абстрактных рассуждений к конкретным примерам.

Рассмотрим задачу обхода бинарного дерева. Пусть у нас есть бинарное дерево с числами в узлах, и нам необходимо выполнить его обход чтобы посчитать сумму. На С++ получится примерно два-три класса c виртуальным методом Sum, если мы конечно захотим воспользоваться "родным" для С++ полиморфизмом для определения различия между листом и обычным узлом. Т. е. чтобы воспользоваться встроенным в язык run-time полиморфизмом, нам надо явно определить новый класс (тип) на каждое определение функции. Плюс, определение полиморфной функции получится обязательно привязано к определению типа — это не нравится многим функциональщикам, например Joe Armstrong-у. Я, впрочем, к этому отношусь спокойно, возможно потому, что С++ мой основной язык.

// без деструкторов и конструкторов, бо ни к чему это в примере...
class Leaf 
{
protected:
   int m_number;
public:
   virtual int Sum() const { return m_number; }
};

class NonLeaf : public Leaf
{
   TreeNode *m_pLeft, *m_pRight;
public:
   int Sum() const { return m_number + m_pLeft -> Process() + m_pRight -> Process(); } 
};


А на ФЯ мы для решения абсолютно той же задачи (разная функция обработки для узлов разных типов) применим pattern-matching:
sum( { Left, Right, Num } ) -> Num + process( Left ) + process( Right );
sum( Num ) -> Num.


Как видишь, код соответствует практически один в один. Подобное применение паттерн-матчинга — повседневная практика для программиста на ФЯ, а не абстрактная философия.

Кстати, опять, решение "в лоб" на ФЯ является самым "правильным". Это возвращаясь к разговору о "невидимости паттернов".
Re[18]: Патч
От: Gaperton http://gaperton.livejournal.com
Дата: 03.11.04 12:34
Оценка:
Oops!
sum( { Left, Right, Num } ) -> Num + sum( Left ) + sum( Right );
sum( Num ) -> Num.

Ашипка вышла.
Re[18]: Какой полиморфизм используется в ФЯ?
От: Курилка Россия http://kirya.narod.ru/
Дата: 03.11.04 12:49
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Кстати, опять, решение "в лоб" на ФЯ является самым "правильным". Это возвращаясь к разговору о "невидимости паттернов".


А вот тут можно чуть подробнее?
Уже не 1-й раз встречаю об этом, но всё "всколзь". Хотелось бы чего-нибудь почитать на сию тему. Или м.б. уже на рсдн осбуждали, но меня рядом не оказалось?

Киньте ссылками, плз, заранее признателен
Re[16]: Какой полиморфизм используется в ФЯ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.11.04 13:40
Оценка:
Здравствуйте, Gaperton, Вы писали:

Заявление:
G>А паттерн-матчинг я за полиморфизм не принимаю, это разные вещи.
Слабо сочетается с:
G> Применение паттерн-матчинга при задании аргументов функции — вот это является одним из самых мощных способов достижения полиморфизма в ФЯ.

Паттерн-матчинг вообще не имеет отношения к полиморфизму. Прочитай еще раз определение из Википедии. Там четко говорится о типах.

G>Все эти определения могут быть даны одновременно, и в рантайме будет выбрано наиболее специфичное.

G>poly_function( { A, B } ) -> ...;
G>вызовется, если аргумент — структура из двух элементов.

G>poly_function( [ A, B ] ) -> ...;

G>вызовется, если аргумент — список из двух элементов. Разные типы, все в порядке, так?

Так. Но это перегрузка функций, а не паттерн-матчинг. Перегрузка — это несомненно статический полиморфизм.

G>poly_function( { A, { B, C } } ) -> ...;

G>вызовется, если аргумент — структура из двух элементов, а значение второго элемента — тоже структура из двух элементов. Что можно также понимать, как единое определение типа (такая хитрая структура) — пока все честно, не так ли?

Не так, Ли. Это всего лишь иная запись для if-а из ИЯ.

G>Как видишь, мы уточнили ограничение на тип по сравнению с первой строкой. Теперь оно более специфично.


Не вижу. Вижу подмену понятий.

G>Паттерн матчинг, однако. И речь идет одновременно и о типах и о значениях.


Каша, однако.

G>С некоторой точки зрения на полиморфизм и природу типов (такой как у тебя, например), подобное поведение выходит за рамки понятия "полиморфизм".


Эта точка зрения называется классической. И ее придерживаются все толковые словари. Полиморфизм работат на уровне типов. Точка! Все что не связано с типами к полиморфизму не относится.

G> С моей — нет. Здесь разница в слишком глубоких посылках, и философском подходе, чтобы так легко говорить, что кто-то "неверно понимает полиморфизм".


Эдак любой термин можно переиначит на наезжать на других, что тебя не понимают. Термины для того и определяются, чтобы люди друг-друга понимали.

G> Я бы выразился, что с моей точки зрения, ты понимаешь его узко — а именно в соответствии с его реализацией в распространенных ОО языках. Ну а свой взгляд на это явление, а также объяснение, почему это на мой взгляд не противоречит известному определению полиморфизма, я привел. Если непонятно, давай пообсуждаем.


Твое обоснование, лично для меня, выглядит не убедительно.

G>Правильно боишься. Вежливый человек на твоем месте сказал бы "похоже, мы с тобой по разному понимаем значение слова полиморфизм".


Косвенное наклеивание на собеседника ярлыка, например, не вежливого человека является довольно низкопроблым демагогическим приемом. Лично я не считаю, что мое мнение о твоей не правоте является не вижливым или оскорбительным. Более того, после подобных выпадов я только больше укрепляюсь в этом мнении.

G> Вот в такой формулировке — да, есть что пообсуждать. А в твоей — обсуждать с тобой то, что я "не верно понимаю", мне не хочется.


То есть обсуждать ты хочешь только если за тобой признают абсолютную правоту?

G> Потому как самый адекватный ответ на такую фразу — "сам дурак" .


Для снесения в помойку, да.

G> Но мы ведь вежливые люди, и не хотим разводить здесь флейм, не так ли? Поэтому я промолчу


Что-то ты слишком громко молчишь. И все не по теме.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Какой полиморфизм используется в ФЯ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.11.04 17:55
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>С абстрактно-философской точки зрения, тем не менее, я считаю трактовку паттерн-матчинга как средства достижения полиморфизма вполне корректной. Да, ты абсолютно прав: мы можем а) предоставить функцию для работы с аргументами независимо от их типа и б) автоматически выбирать реализацию функции в зависимости от ее аргументов.


Тогда банальный if — это тоже полиморфизм.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Какой полиморфизм используется в ФЯ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.11.04 17:55
Оценка:
Здравствуйте, Gaperton, Вы писали:

Вот аналог твоей процедуры без наследования полипорфизма и т.п.

class NonLeaf : public Leaf
{
    TreeNode *m_pLeft;
    TreeNode *m_pRight;
    int m_number;
public:
    int Sum() const 
    {
        return 
            (m_pLeft == NULL ? 0 : m_pLeft->Sum())
            + (m_pRight == NULL ? 0 : m_pRight->Sum())
            + m_number;
};


Еще раз повторюсь. Если имеет место рантайм-анализ значений, то это не полиморфизм. Если имеет место подбор функции по типу, то это полиморфизм. Но подбор функции по типу — это перегрузка или виртуальный вызов, а не как не паттерн-мачинг.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Какой полиморфизм используется в ФЯ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.11.04 17:55
Оценка:
Здравствуйте, Nick_, Вы писали:

N_>Можно рассматривать не только с абстрактно-философской точки зрения. В системе типов Хиндли-Милнера тип — это множество значений. Таким образом, значение тоже является типом.


Ну, тогда любой код полиморфный. Ведь все значения отдельные типы. По-моему — это уже абсурд.

Все таки есть общепринятое (классическое) понятие типа. И общепринятое понятие полипорфизма. И в разговоре с другими (особенно не обращенными в некую религию) нужно придерживаться общепринятых понятий.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Патч
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.11.04 17:55
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Oops!

G>
G>sum( { Left, Right, Num } ) -> Num + sum( Left ) + sum( Right );
G>sum( Num ) -> Num.
G>

G>Ашипка вышла.

Она у тебя и в С-шном коде.

Ты лучше другое объясни. Это что за язык? И что означает "{ Left, Right, Num }"?
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Какой полиморфизм используется в ФЯ?
От: Nick_ Россия  
Дата: 03.11.04 20:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Nick_, Вы писали:


N_>>Можно рассматривать не только с абстрактно-философской точки зрения. В системе типов Хиндли-Милнера тип — это множество значений. Таким образом, значение тоже является типом.


VD>Ну, тогда любой код полиморфный. Ведь все значения отдельные типы. По-моему — это уже абсурд.


VD>Все таки есть общепринятое (классическое) понятие типа. И общепринятое понятие полипорфизма. И в разговоре с другими (особенно не обращенными в некую религию) нужно придерживаться общепринятых понятий.


Ну тогда дай определение
1) типу
2) полиморфизму
Re[20]: Какой полиморфизм используется в ФЯ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.11.04 23:14
Оценка:
Здравствуйте, Nick_, Вы писали:

N_>Ну тогда дай определение

N_>1) типу
N_>2) полиморфизму

Polymorphism (computer science)
Datatype
Object-oriented programming
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.