Re[30]: Какой полиморфизм используется в ФЯ?
От: Gaperton http://gaperton.livejournal.com
Дата: 08.11.04 22:34
Оценка: +2
Здравствуйте, Аноним, Вы писали:

А>Что-то много эмоций и мало логики.

А>Понятие полиморфизм означает применимость функции к разным типам.
А>Поскольку эрланг бестиповый язык, никакого полиморфизма в нем не может быть по определению.
Неправильно. Бестиповым языком можно назвать какой-нибудь Forth. А эрланг — это динамически типизированный язык. Если сомневаешься в наличии в нем типов, отсылаю к мануалу по Erlang.

А>Вот это

>> poly_function( { A, B } ) -> ...;
>> poly_function( [ A, B ] ) -> ...;
А>не полиморфная фунция.
Неправильно. Это — полиморфная функция.

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

Во-первых, в статически типизированном, конечно. А во-вторых — можно я попробую — вдруг все-таки получится? Вот пример на очень статически типизированном Clean (система типов Милнера-Майкрофта):

::MyType = MyTuple Int Int | MyList [Int]

Funct:: MyType -> Int
Funct ( MyTuple a b ) = a
Funct ( MyList [ a, b ] ) = a


Вот и все. А ты боялся. В статически типизированном Хаскеле (и ML) будет то же самое.
Причем, практически для любых разумных сочетаний фактических типов эелементов А и В возможно определить такой алгебраический тип, что в ML и Хаскель будет то же самое, что и в эрланг (пусть тебя не пугает Int). И наоборот, в "бестиповом" эрланге можно добавить такие же ограничения на типы элементов. А потом прогнать dyalizer, чтобы он статически нашел ошибки типизации.

Впрочем, если не устраивает пример на Clean, я могу привести пример на С++, где такое же сопоставление будет произведено одним простым виртуальным вызовом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.