Haskell中是否有函數返回對的另一個成員,例如調用函數「other」:other'D'('D','W' )會返回'W',其他'W'('D','W')返回'D'?Haskell中的函數返回一對中的其他元素
0
A
回答
1
other :: Eq a => a -> (a, a) -> a
other x (y,z) | x == y = z | x == z = y | otherwise = error "undefined"
你可以做這樣的事情。請注意,如果字符存在於元組值範圍之外,會發生什麼?
test1 = other 'D' ('D','W') -- * W
test2 = other 'W' ('D','W') -- * D
test3 = other 'X' ('D','W') -- * error...
Per @ RottenBrain的建議。 monod可以用來處理故障情況。
other :: Eq a => a -> (a, a) -> Maybe a
other x (y,z) | x == y = Just z | x == z = Just y | otherwise = Nothing
7
「Haskell中是否有函數說....」?
通過使用Hoogle,您可以對任何此類問題的答案有個很好的主意。 Haskell的美妙之處在於,這種類型通常實際上限制了您提出的功能,而Hoogle則是讓您獲得非常全面的答案的工具。
在這種情況下,我們得到一個元組,並且想要得到元組中的一個值作爲結果。
(a, b)->a->b or (a, b)->b->a
但是等等! Haskell不能從同一個函數輸出兩種不同的類型,所以給出了一個隱含的約束 - a
必須與b
相同。現在的類型是:
(a, a)->a->a
(這更加縮小功能搜索空間,使得Hoogle更加有用)。
再次等待......我們忘記了一些東西。 a
需要有一個(==)
操作,以類型做了測試....大,甚至進一步收窄:
Eq a=>(a, a)->a->a
現在,我們可以輸入到這個Hoogle,看看....幾乎沒有有用。
這是失敗嗎?一點也不! Hoogle非常全面,在我之前的經驗中,如果它不存在,它可能不是標準功能,所以請自己寫。
(這並不奇怪,我認爲這個功能不是標準....元組很少用來繞過相同類型的項目的泛型列表,那就是更多的列表-Y的東西)
+0
很好的答案:)我將它發送給每一個「有沒有在Haskell的函數......」?題 :) – d12frosted
相關問題
- 1. Javascript中的返回值其他函數
- 2. 在Ocaml中返回列表的每一個其他元素
- 3. Haskell - 如何創建一個返回列表中第五個元素的函數
- 4. Haskell函數返回重疊元素的數量
- 5. 如何調用haskell中另一個函數返回元組的函數?
- 6. 使用函數返回其他函數的參數(在Python中)
- 7. 返回元組列表中特定元組的snd元素Haskell
- 8. 獲取其他函數中的函數返回?
- 9. 從兩列之一返回值,或者跳過數組中的其他元素?
- 10. Haskell函數模式'其他'
- 11. 函數返回其他函數
- 12. 返回不在其他XML中的元素
- 13. ↑76函數返回元素
- 14. Pointfree在Haskell中返回一個元組
- 15. 函數僅返回一個元素
- 16. php函數返回一個select元素
- 17. 函數返回所有其中字段是元素1
- 18. css3 flex對齊時,其中一個元素是其他元素的2倍
- 19. 從Oracle中函數返回表中選擇的其他方法
- 20. 列表中的F#返回元素對
- 21. 找到數組中的第一個元素,其中塊返回true並返回塊的返回值
- 22. 做一些函數返回和其他不在Python中?
- 23. 跳過數組中的最後一個元素並返回所有其他元素C#
- 24. Haskell函數顛倒一個列表並向其中插入一個新元素
- 25. Haskell,一個列表中的兩個元素後跟一個元素的其他列表? (模式匹配)
- 26. 在其他函數中使用返回的變量
- 27. 代表函數返回其他線程中的值
- 28. 選擇一個元素,其中有任何其他元素
- 29. 返回JSON對象的元素數量
- 30. 從返回一個C++對象的函數中返回null
我認爲他知道如何編寫功能,只是想知道,如果它已經Haskell的庫的一部分。此外,在這種情況下,「未定義」會比「錯誤」更好。 –
@保羅曼塔 'undefined'是的'error' ... '未定義=錯誤定義的 「前奏;未定義」' –
@The互聯網謝謝:)。 – user3094936