gpt4 book ai didi

f# - 此表达式的类型应为 'unit',但此处的类型为 '' a []'

转载 作者:行者123 更新时间:2023-12-01 11:21:38 26 4
gpt4 key购买 nike

以下代码尝试在 F# 中进行递归冒泡排序,但我收到了错误

“这个表达式的类型应该是‘unit’,但这里的类型是‘a []’”

中间三行:

let swap i j (arr : 'a []) =
let tmp = arr.[i]
arr.[i] <- arr.[j]
arr.[j] <- tmp

let rec recursiveBubbleSort i j (sequence : 'a []) =
if i = sequence.Length then sequence //error
elif j = sequence.Length then recursiveBubbleSort (i+1) 0 sequence //error
elif sequence.[i] > sequence.[j] then swap i j sequence //error
recursiveBubbleSort i (j+1) sequence

这真的让我感到困惑,因为我发现的所有资源都没有充分解释或暗示为什么会发生这种情况。任何帮助将不胜感激。

最佳答案

我想这就是你想写的:

let rec recursiveBubbleSort i j (sequence : 'a []) =
if i = sequence.Length then sequence
elif j = sequence.Length then recursiveBubbleSort (i+1) 0 sequence
else
if sequence.[i] > sequence.[j] then swap i j sequence |> ignore
recursiveBubbleSort i (j+1) sequence

因此,您编写的最后一个 elif 必须是 else,在 else 中还有另一个 if 检查是否执行交换。

所有 if .. then,包括 elif 或不包括,都必须以 else 结尾,除非它是unit 表达式(作为对 swap 的调用)。

这就是您收到该错误的原因。

最后注意你的比较是倒序的,你会按降序排列列表。

关于f# - 此表达式的类型应为 'unit',但此处的类型为 '' a []',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41915802/

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