我對Data.MapAPI感到困惑。我正在尋找一種簡單的方法來以log(n)成本查找地圖的一系列鍵。這是一個基本概念,稱為“二分搜索”,也可能是“二等分”。
我看到這個奇怪的takeWhileAntitone函式,我需要提供一個“反調”謂詞函式。這是我第一次遇到這個概念。
在閱讀了有關該主題的 Wikipedia 之后,這似乎只是在說,當按鍵順序應用于引數時,可能只有一個地方可以使函式從True變為False。這符合二分搜索的要求。
由于 API 是用一種奇怪的(對我來說)語言記錄的,我想在這里問:
- 如果我的理解是正確的,并且
- 有一個原因,這些功能都沒有叫
bisect,binarySearch或類似的?
uj5u.com熱心網友回復:
由于 API 是用一種奇怪的(對我來說)語言記錄的,我想在這里問:
- 如果我的理解是正確的,并且
是的。takeWhileAntitone(以及庫中其他類似命名的變體)是對鍵進行二分搜索的函式。它沒有命名,takeWhile因為它不適用于任何引數謂詞,所以如果您正在審查代碼,它可以作為檢查的提醒。
- 是否有理由不將這些函式稱為 bisect、binarySearch 或類似函式?
這個名稱有助于區分變種
takeWhileAntitone,dropWhileAntitone,spanAntitone即“做二進制搜索”,但不同的最終結果。takeWhile是 Haskell 標準庫中的一個眾所周知的名字(在 中Data.List)。在 FP 中,我們喜歡區分“什么”和“如何”。“二分搜索”是一種演算法(“如何”)。“take while”字面上也是“how”,但它的含義可以說更自然地與“what”(滿足謂詞的元素的最長前綴)相關聯。特別是,將“take while”解釋為“最長前綴”不依賴于關于謂詞的任何假設。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387021.html
