转换为 Haskell 中的二进制表示法
Convert to binary notation in Haskell
是否有更好的方法来检查此代码中的 n
和 c
,也许使用模式匹配或更多类似 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。
是否有更好的方法来检查此代码中的 n
和 c
,也许使用模式匹配或更多类似 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。