Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 在F中缩放序列#_F#_Sequences - Fatal编程技术网

F# 在F中缩放序列#

F# 在F中缩放序列#,f#,sequences,F#,Sequences,我试图通过序列的第一个元素来缩放序列,所以第一个元素总是一个,然后后续元素是原始序列的第一个元素与第n个元素的比率 这是我的密码 open System open System.Collections let squish1 (x:Double seq) = let r = (Seq.head x:Double) Seq.fold (fun (xi:Double) (r:Doub

我试图通过序列的第一个元素来缩放序列,所以第一个元素总是一个,然后后续元素是原始序列的第一个元素与第n个元素的比率

这是我的密码

       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|];;
我已经键入了所有内容,因为我收到了此错误消息

fsx(9,1):错误FS0030:值限制。值“it”已被>推断为具有泛型类型 val it:(双精度->双精度->双精度)当'\u a:>序列
使“it”的参数显式,或者,如果不希望它是泛型的,则>添加类型注释

但很明显,我误解了,因为即使键入了所有内容,我也会收到错误消息。我错过了什么


我非常感激您的建议。谢谢,fold需要两个参数,种子值和序列。这项工作:

let squish1 (x:Double seq) =
    let r =  (Seq.head x:Double)
    Seq.fold (fun (xi:Double) (r:Double) -> xi/r) 0.0 x
但是,我猜您可能想要
map
而不是
fold

let squish1 (x:Double seq) =
    let r =  (Seq.head x:Double)
    Seq.map (fun (xi:Double) -> xi/r) x
顺便说一句,我可能会这样写:

let inline squish1 (x:seq<_>) =
  let r = Seq.head x
  Seq.map (fun n -> n / r) x
let inline squish1(x:seq)=
设r=序号x
序列图(趣味n->n/r)x

现在它适用于支持部门的所有类型。

谢谢您的建议。我现在得到的答案是0.0!我希望有一个按比例排列的序列?我是否使用了错误的函数(.fold)?是的,这听起来很正确。我已经去掉了|>Seq.skip 1,因为这意味着第一个学期被错过了,但现在这正如预期的那样起作用。非常感谢。哦,刚刚看了修订版。这很好。哈哈,它现在是用r除以x,所以它给出了我想要的答案的倒数!哦,你说得对。您必须使用
Seq.map(fun n->n/r)x
注意,在F中使用别名
float
比使用
System.Double
更为惯用。是的,我知道。这是我们的开发团队的设计选择,因为我们有时需要处理的数据类型。但是
float
只是
System.Double
的别名。它们是一样的。kvb只是说在代码中使用
float
别名更为惯用-它不会改变程序的行为。有趣的是,它会将您的评论传递给首席开发人员。