[英]“No operation” haskell
如果我從學校正確記得,有一個函數或關鍵字用於“尚未實現”,但代碼編譯。 我試圖搜索它,但找不到。 誰知道我在找什么?
就是這樣的
isDivisor :: Integer -> Integer -> Bool
isDivisor x y = None
--isDivisor x y = (rem x y) == 0
你想到的是bottom
bottom不僅僅是為了顯示沒有實現的東西,它意味着代表一個導致我們的程序失敗的計算。
例如,我們實際上可以將undefined
自己定義為無限循環
undefined = let x = x in x
undefined = undefined
所以我們真正做的就是輸入一個undefined :: a
的值undefined :: a
會導致或編程崩潰或永遠循環的值,但從不評估它。
因此,如果你有一些大而復雜的功能,你不知道如何實現,你可以這樣做
foo :: Bar -> Baz -> Quux
foo bar baz = foo bar baz
從這個類型檢查,它將編譯,我們可以測試我們的程序的其他部分。
但是,因為當你意外地運行程序的那一部分時,無限循環是非常無益的,所以GHC和其他人以不同方式實現undefined
。 他們讓程序崩潰並發出錯誤消息,例如:
-- In GHC
error msg = throw (ErrorCall s)
undefined = error "Prelude.undefined"
因此,保留一個未定義的函數,具有更好的調試功能
foo bar baz = undefined
foo bar baz = error ("Tried to evaluate foo with" ++ show bar ++ show baz)
如果你發現底層混亂的概念,哈馬爾發布了一個很好的答案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.