7
如果我沒記錯的學校,還有一個用於函數或關鍵字「尚未實現。」但代碼編譯。我試圖搜索它,但找不到。任何人都知道我在找什麼?「不操作」哈斯克爾
是的類似
isDivisor :: Integer -> Integer -> Bool
isDivisor x y = None
--isDivisor x y = (rem x y) == 0
如果我沒記錯的學校,還有一個用於函數或關鍵字「尚未實現。」但代碼編譯。我試圖搜索它,但找不到。任何人都知道我在找什麼?「不操作」哈斯克爾
是的類似
isDivisor :: Integer -> Integer -> Bool
isDivisor x y = None
--isDivisor x y = (rem x y) == 0
你在想什麼的被稱爲bottom
底部不只是爲顯示未實現的東西,它的意思表示這會導致我們的程序的計算失敗。
例如,我們可以實際上定義undefined
自己作爲一個無限循環
undefined = let x = x in x
undefined = undefined
因此,其實我們現在所做的只是一個值undefined :: a
投入,這將導致或程序永遠崩潰或環路,但從來沒有評估它。
因此,如果你有一些大而複雜的功能,你不知道如何實現,你可能只是這樣做
foo :: Bar -> Baz -> Quux
foo bar baz = foo bar baz
由於這typechecks,它會編譯和我們可以測試的其他部分我們程序。
但是,由於當您意外地運行該程序的這一部分時,如果出現無限循環是相當無益的,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)
如果您發現底部混亂,哈馬爾的概念未定義功能貼有很大answer
使用'undefined'。當你調用這個函數時,你會得到'*** Exception:Prelude.undefined'。 –
或者,'isDivisor x y = error「Not yet implemented」',或者,如果你想ghci循環,'isDivisor x y = isDivisor x y'。 –