Здравствуйте, Gaperton, Вы писали:
G>А эрланг — это динамически типизированный язык.
"Динамически типизированный" и бестиповый — это одно и то же.
А>>Вот это
>>> poly_function( { A, B } ) -> ...;
>>> poly_function( [ A, B ] ) -> ...;
А>>не полиморфная фунция.
G>Неправильно. Это — полиморфная функция.
Повторюсь. Полиморфная функция-функция,применимая к объектам
разных типов. В эрланге все функции имеют один тип аргумента — терм.
G>G>::MyType = MyTuple Int Int | MyList [Int]
G>Funct:: MyType -> Int
G>Funct ( MyTuple a b ) = a
G>Funct ( MyList [ a, b ] ) = a
G>
Вы наверное удивитесь, если я скажу, что это тоже
не полиморфная функция? Посмоторите на её сигнатуру.
G> в "бестиповом" эрланге можно добавить такие же ограничения на типы элементов.
А после этого он превратится в типизированный.
Полиморфизм нужен чтобы обходить ограничения, накладываемые системой типов. Если никаких
ограничений нет, значит нет и типов и полиморфизм ни к чему.