转换为 Haskell 中的二进制表示法

Convert to binary notation in Haskell

是否有更好的方法来检查此代码中的 nc,也许使用模式匹配或更多类似 Haskell 的方法?

toBin :: Int -> Int -> [Int]
toBin n c
    | n < 0 = []
    | c <= 0 = []
toBin n c = toBin (n `div` 2) (c - 1) ++ [n `mod` 2]

好吧,它们都是布尔表达式,因此您可以将它们与 ||

结合使用
toBin n c | n < 0 || c <= 0 = []

这里最好使用累加器,这样可以防止 O(n) 追加导致 O(n 2) 代码中的算法:

toBin :: Int -> Int -> [Int]
toBin = go <b>[]</b>
  where go <b>rs</b> n c
          | n < 0 || c <= 0 = rs
          | otherwise = go <b>(r:rs)</b> q (c-1)
          where (q,<b>r</b>) = quotRem n 2

因此,我们从一个空列表开始,每次都在列表前添加下一个余数,直到数字为零,或者位数为 0。