Общее умножение разных типов - PullRequest
1 голос
/ 05 сентября 2010

Проще говоря, я хочу реализовать такую ​​функцию:

let myfunction (scalar : float) (quantities : ''T list) = 
    List.fold (fun acc quantity -> acc + quantity * scalar)
        LanguagePrimitives.GenericZero<_>
            quantities : 'T

Обратите внимание, что я умножаю значение универсального типа 'T и значение с плавающей запятой (quantity * scalar), которое должно возвращать значение типа 'T. Например, умножение Point на скалярный результат в Point.

Я не могу заставить F # понять, что умножение quantity * scalar должно привести к значению типа 'T. Я пробовал LanguagePrimitives.MultiplyDynamic, но, похоже, эта функция зарезервирована для использования компилятором F #.

Что мне делать?

1 Ответ

3 голосов
/ 05 сентября 2010

Есть ли основания специализироваться на том случае, когда скаляр является поплавком? Я думаю, что лучше всего обобщать еще дальше:

let inline myfunction scalar quantities =  
    List.fold (fun acc quantity -> acc + quantity * scalar)
        LanguagePrimitives.GenericZero<_>
        quantities 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...