前几天我决定转入 F#。在任务的框架内,我们需要一个将数字分解为组成数字的函数。起初,我完成了它ToString
,随后又投入list<char>
了list<int>
——它奏效了,但不知何故,这一切都不是运动的。重制。并且有一种可以改进的感觉。请做一个审查。
let gridWhith = 10
let getBalance value = (value % gridWhith)
let getQuotient value = (value / gridWhith)
let rec getDigitsSeq (value:int) =
let acc = List.empty<int>
let balance = getBalance value
let quitient = getQuotient value
let reversedResult =
if quitient = 0 then value :: acc
else balance :: (getDigitsSeq quitient @ acc)
List.rev reversedResult
代码中的一些细节可以省略,因为它们相互重复。他们说好的文学没有什么可以拿走的,也没有什么可以增加的。
你能写得更轻松吗
功能
getBalance
,getQuotient
仍然没有在其他任何地方使用。由于名称balance
和quotient
.gridWhith
如果没有编写通用函数的任务,我会删除。现在是函数本身。她看起来太霸道了。就像函数式编程中经常出现的情况一样,在这里使用累加器创建一个内部递归函数,并使用正确的累加器从外部函数调用它是很方便的。在我们的例子中,这是一个空列表。
break
意味着打破。如果我没记错的话,英文中将数字分解为数字是通过break精确表达的。另一个不错的选择: