我對 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,但我不知道它如何與我的特定功能一起使用。F# 檢查串列是否為空
任何幫助將不勝感激,并在此先感謝!
uj5u.com熱心網友回復:
最優雅的方法是使用模式匹配,它可以讓您檢查串列是否正好有兩個元素并提取它們的值:
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!"
也就是說,如果你總是想傳遞兩件事,你不應該使用串列,而是使用元組。你可以有一個元組的元組——這很好——但如果你知道它恰好是兩個元素,那么使用串列就違反了“使無效狀態無法表示”的規則。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/420754.html
標籤:
