Я пытаюсь масштабировать последовательность по первому элементу последовательности, поэтому первый элемент всегда будет одним, а последующие элементы будут отношением первого элемента к n-му элементу оригинала последовательность.Масштабирование последовательности в F #
Вот мой код,
open System
open System.Collections
let squish1 (x:Double seq) =
let r = (Seq.head x:Double)
Seq.fold (fun (xi:Double) (r:Double) -> xi/r);;
И я испытываю на этом маленьком векторе: -
squish1 [|5.0; 1.0; 1.0; 1.0; 1.0; 1.0|];;
Я напечатал все, потому что я получаю сообщение об ошибке
normaliseSequence. fsx (9,1): ошибка FS0030: ограничение значения. Значение 'it' было> выведено для того, чтобы иметь общий тип val it: (Double -> '_a -> Double), когда' _a:> seq
Либо сделайте аргументы «явным», либо, если вы этого не сделаете намеревайтесь, чтобы он был общим,> добавьте аннотацию типа.
Но ясно, что я недопонимаю, потому что получаю сообщение об ошибке даже при всем набранном. Что мне не хватает?
Любые советы, полученные с благодарностью. Спасибо
Обратите внимание, что в F # более идиоматично использовать псевдоним 'float', а не' System.Double'. – kvb
Да, я знаю. Это был выбор дизайна нашей командой разработчиков из-за типов данных, которые нам иногда приходится обрабатывать. –
Но 'float' - просто псевдоним' System.Double'. Это одно и то же. kvb просто говорит, что более идиоматично использовать псевдоним 'float' в вашем коде - он ничего не меняет о поведении вашей программы. –