很抱歉我的问题,但我不了解与此问题相关的答案,所以我希望有人能进一步启发我。
我是一名数据科学新学生,我们将学习如何使用功能语言F#进行编程。我们正在学习算法,我想将算法编写为F#函数,以检查我在纸上的计算是否正确。
我收到以下错误信息:
"This value is not mutable. Consider using the mutable keyword let mutable n = expression"
我的代码如下所示:
let loop5( n ) =
let mutable x = 0
while n > 0 do
x <- x + 1
n <- n + 1
printfn "loop5(): x=%i for n=%i" x n
loop5(4)
我正在尝试编写一个如下所示的函数(伪代码):
loop5(n)
x = 0
while n > 0
x = x + 1
n = n + 1
return x
希望我提出了一个明确的问题,有人可以在这里帮助我:-)周末愉快
您正在尝试更改循环的参数n
。该参数不是可变的,因此编译器不允许您使用。这正是错误告诉您的内容。
现在,通常来说,要使错误消失,可以使变量可变。但是,您不能使函数参数可变,因此这不是一种选择。
在这里,您想考虑程序的含义。该loop
功能是否需要将更新后的值传递n
回其调用者,还是整个变异都是其内部业务?如果是前者,请参阅@AnyMoose的答案,但是从您的示例和解释中,我怀疑是后者。如果是这种情况,只需对参数进行可变复制并使用它:
let loop n' =
let mutable x = 0
let mutable n = n'
...
另外,我想指出的是,您编写的程序实际上会无限期地循环(或者直到它始终包裹在最大int值之前),因为您不必增加n
每一步,而要增加它。如果您想让程序在下一个冰河世纪之前真正完成,则需要在n
每次迭代时减少:
n <- n - 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句