2017-05-08 242 views
0

我想在Haskell中實現我自己版本的庫函數div。這是我對問題的解決方案,但它不是我希望的方式工作,我不知道我還能如何實現它。任何幫助將不勝感激!在Haskell中實現庫函數`div`

div' :: Int -> Int -> Int 
div' m n 
    | n == 0  = 0 
    | n > 0  = div' m (n-1) - m 
+1

它是如何工作的?你會得到什麼錯誤信息? – Alec

+2

'div 42 0 == 0'看起來相當不對!遞歸的情況也是錯誤的。 – chi

+0

沒有錯誤信息,只是無限循環 – newbie

回答

2

你應該處理除以0的情況嗎?如果是這樣,那就爲此另立個案。

劃分算法的基本情況應該是當一個< b。如果說你有4/7,算法會吐出什麼? 當a> = b時,遞歸情況應該處理。這應該讓你開始在自然數上定義div函數。

+0

如果你不知道這應該如何工作,發佈你的代碼的更新版本,我會看看並引導你通過算法更詳細。 – GrainOfSalt

+0

現在就開始工作了,謝謝你讓我離開! – newbie

0

你可以做類似如下:

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   
  • 如果分母爲0,這是一個錯誤
  • 如果分子是負的,否定的分子的否定結果
  • 如果分母是正數,檢查是否有要減去的內容,如果是,則遞歸調用
  • 如果分母是負數,請檢查是否有要添加的內容,如果是,則遞歸調用