确定列表是否为空

Identify If The List Is Empty

我完全不熟悉 F# 我有这个函数可以计算两个不同的 xy 点的总和,就像这样 let vAdd (x1, y1) (x2, y2) : float * float = (x1 + x2, y1 + y2) 然后我有另一个函数需要点列表,然后使用 vAdd 进行计算。 let vSum [(x1, y1); (x2, y2)] = vAdd (x1, y1) (x2, y2)

现在我的问题是,如果给定的列表为空,我将如何检查并抛出一些错误?我尝试使用 if ... then failwith "list is empty"IsEmpty 不工作。我看过的另一件事是 pattern matching, 但同样,我不知道它如何与我的特定功能一起使用。

如有任何帮助,我们将不胜感激,在此先致谢!

最优雅的方法是使用模式匹配,它可以让您检查列表是否恰好有两个元素并提取它们的值:

let vSum list = 
  match list with
  | [(x1, y1); (x2, y2)] -> vAdd (x1, y1) (x2, y2)
  | _ -> failwith "The list did not have two elements!"

您可以使用 function 关键字稍微缩短它,这是一个函数的快捷方式,它接受一个变量并对其进行模式匹配:

let vSum = function
  | [(x1, y1); (x2, y2)] -> vAdd (x1, y1) (x2, y2)
  | _ -> failwith "The list did not have two elements!"

也就是说,如果你总是想传递两个东西,你不应该使用列表,而应该使用元组。你可以有一个元组的元组 - 这很好 - 但如果你知道它恰好是两个元素,那么使用列表就违反了“使无效状态无法表示”的规则。