【问题标题】:F#: How to pass two lists in to a formula and return my results?F#:如何将两个列表传递给公式并返回我的结果?
【发布时间】:2018-09-30 05:29:00
【问题描述】:

所以我有这个函数,我接受两个浮点列表并使用它们各自的索引元素来计算这个简单的公式:(x-y)^2 / x 用于每个索引(0,1,2,3...)

这是我目前所拥有的:

let myCalc (list1: float list) (list2: float list) : float list  = 
    List.map2 (fun x y -> (x-y)^2 / x) list1 list2

我不断收到此错误:This expression was expected to have type 'float' but here has type 'string'

我上面列出的方法为什么行不通,但这个例子行得通:

let list1 = [1; 2; 3]
let list2 = [4; 5; 6]
let sumList = List.map2 (fun x y -> x + y) list1 list2
printfn "%A" sumList

谁能解释我如何理解我编写的代码和上面列出的示例代码之间的区别?是的,我已经尝试将 List.map2 设置为一个变量,然后将其打印出来,但这也不起作用。我认为这与我进行计算的方式有关,我只是不知道出了什么问题。

另外,我希望将我的输出结果存储在相应 x 和 y 索引的列表中。请帮忙。

【问题讨论】:

    标签: list function f# maplist


    【解决方案1】:

    这个错误的原因比较简单,你使用了错误的幂运算符(^)。在 F# 和一般的 ML 语言家族中,此运算符是连接字符串运算符。这就是您收到此错误的原因,因为编译器希望在^operator 的右值和左值中找到两个string 类型的参数。

    您必须使用** 运算符:

    let myCalc (list1: float list) (list2: float list) : float list =
        List.map2 (fun x y -> (x - y) ** 2. / x) list1 list2
    

    2int 类型的文字,我们必须指定我们要使用float 类型的文字值作为表达式,所以这给了我们这个:2.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 2014-09-24
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      相关资源
      最近更新 更多