簡體   English   中英

F#:如何將兩個列表傳遞給公式並返回我的結果?

[英]F#: How to pass two lists in to a formula and return my results?

所以我有這個函數,我接收兩個浮點列表並使用它們各自的索引元素來計算這個簡單的公式: (xy)^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 索引列表中。 請幫忙。

此錯誤的原因相對簡單,您使用了錯誤的冪運算符 ( ^ )。 在 F# 以及一般的 ML 語言系列中,此運算符是連接字符串運算符。 這就是您收到此錯誤的原因,因為編譯器希望在^運算符的 rvalue 和 lvalue 中找到string類型的兩個參數。

您必須使用**運算符:

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

2是一個int類型的文字,我們必須指定我們要為表達式使用一個float類型的文字值,所以這給了我們: 2.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM