确定列表是否为空
Identify If The List Is Empty
我完全不熟悉 F# 我有这个函数可以计算两个不同的 x
和 y
点的总和,就像这样 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!"
也就是说,如果你总是想传递两个东西,你不应该使用列表,而应该使用元组。你可以有一个元组的元组 - 这很好 - 但如果你知道它恰好是两个元素,那么使用列表就违反了“使无效状态无法表示”的规则。
我完全不熟悉 F# 我有这个函数可以计算两个不同的 x
和 y
点的总和,就像这样 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!"
也就是说,如果你总是想传递两个东西,你不应该使用列表,而应该使用元组。你可以有一个元组的元组 - 这很好 - 但如果你知道它恰好是两个元素,那么使用列表就违反了“使无效状态无法表示”的规则。