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
答案 0 :(得分:7)
如果没有括号,您会(sizeofInt x) `div` 10
说sizeofInt x
,永远会调用{{1}}。应用程序总是比任何操作员都更紧密地绑定。