为什么这不是终止```1 +(sizeofInt x`div`10)``?

时间:2018-03-06 23:37:02

标签: haskell

sizeofInt :: Int -> Int
sizeofInt 0 = 0
sizeofInt x = 1 + (sizeofInt x `div` 10)

为什么这个函数不会终止,除非我在x `div` 10附近放置括号?

更新:修正了数字为0时的情况

sizeofInt :: Int -> Int
sizeofInt x = if m == 0 then 1
  else 1 + sizeofInt m
  where m = x `div` 10

1 个答案:

答案 0 :(得分:7)

如果没有括号,您会(sizeofInt x) `div` 10sizeofInt x,永远会调用{{1}}。应用程序总是比任何操作员都更紧密地绑定。