变体1
convertToBinary digitsList =
digitsList
|> List.take 4
|> setLastDigitToZero
|> numberFromDigits
setLastDigitToZero digitsList =
Array.fromList digitsList
|> Array.set (lastIndex digitsList) 0
|> Array.toList
lastIndex digitsList =
List.length digitsList - 1
vs
变体2
convertToBinary digitList =
digitList
|> List.take 3
|> List.reverse
|> List.append [ 1 ]
|> List.reverse
|> numberFromDigits
您怎么看?而且最重要的是为什么?
似乎您想将4位数字中的最低有效位设置为零。为此,您可以传入数字数组,使用数组操作将数字设置为零,然后重新组合数字。
无论您如何做,这都会很慢。
更快得多的方法是将数字保持为整数并使用按位运算:
clearLeastSignificantBit : Int -> Int
clearLeastSignificantBit n = Bitwise.and n 0x0E -- 00001110 in binary
这种方式:
clearLeastSignificantBit 15 == 14 -- 1111 -> 1110
clearLeastSignificantBit 10 == 10 -- 1010 -> 1010
clearLeastSignificantBit 3 == 2 -- 0011 -> 0010
由于程序员通常熟悉按位运算,所以这是很容易理解的。