gpt4 book ai didi

arrays - 在数组数组上使用 Array.map

转载 作者:行者123 更新时间:2023-12-01 09:34:31 25 4
gpt4 key购买 nike

我有一个数组 P,它表示一个矩阵,作为一个行向量数组(这种表示对我的目的更方便),我想提取该数组的列向量 j。我的第一关是:

let column (M: float[][]) (j: int) =
Array.map(fun v -> v.[j]) M

这无法编译,告诉我 v.[j] 在不确定类型的对象上使用 operator expr.[idx] 。这让我感到困惑,因为悬停在 v 上会将 v 识别为一个 float[],我认为它是一个行向量。

此外,以下代码有效:
let column (M: float[][]) (j: int) =
Array.map(fun v -> v) M
|> Array.map (fun v -> v.[j])

我无法理解第二个示例与第一个示例有何不同。第二个示例中的第一个映射看起来多余:我将数组映射到自身,但这似乎解决了类型确定问题。

任何帮助理解我做错了什么或没有看到的帮助将不胜感激!

最佳答案

问题是 F# 类型推断是严格从左到右的,以便编译器看到

let column (M: float[][]) (j: int) =
Array.map(fun v -> v.[j])

此时,它对 v 一无所知,因此会引发错误。这就是前向管道运算符 |> 如此常见的原因 - 将您的代码重写为
let column (M: float[][]) (j: int) =
M |> Array.map(fun v -> v.[j])

很好。这也是您的第二个示例有效的原因

关于arrays - 在数组数组上使用 Array.map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10731173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com