我想在Haskell中實現我自己版本的庫函數div
。這是我對問題的解決方案,但它不是我希望的方式工作,我不知道我還能如何實現它。任何幫助將不勝感激!在Haskell中實現庫函數`div`
div' :: Int -> Int -> Int
div' m n
| n == 0 = 0
| n > 0 = div' m (n-1) - m
我想在Haskell中實現我自己版本的庫函數div
。這是我對問題的解決方案,但它不是我希望的方式工作,我不知道我還能如何實現它。任何幫助將不勝感激!在Haskell中實現庫函數`div`
div' :: Int -> Int -> Int
div' m n
| n == 0 = 0
| n > 0 = div' m (n-1) - m
你應該處理除以0的情況嗎?如果是這樣,那就爲此另立個案。
劃分算法的基本情況應該是當一個< b。如果說你有4/7,算法會吐出什麼? 當a> = b時,遞歸情況應該處理。這應該讓你開始在自然數上定義div函數。
如果你不知道這應該如何工作,發佈你的代碼的更新版本,我會看看並引導你通過算法更詳細。 – GrainOfSalt
現在就開始工作了,謝謝你讓我離開! – newbie
你可以做類似如下:
div' :: Integral a => a -> a -> a
div' m 0 = error "Exception: divide by zero"
div' m n
| m < 0 = 0 - div' (-m) n
| n > 0 = if m < n then 0 else 1 + div' (m - n) n
| n < 0 = if m < -n then 0 else -1 + div' (m + n) n
它是如何工作的?你會得到什麼錯誤信息? – Alec
'div 42 0 == 0'看起來相當不對!遞歸的情況也是錯誤的。 – chi
沒有錯誤信息,只是無限循環 – newbie