簡體   English   中英

“沒有操作”已經開始了

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM