如何通过F#在函数中创建可变参数?

朱比班纳

很抱歉我的问题,但我不了解与此问题相关的答案,所以我希望有人能进一步启发我。

我是一名数据科学新学生,我们将学习如何使用功能语言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

希望我提出了一个明确的问题,有人可以在这里帮助我:-)周末愉快

费奥多·索金(Fyodor Soikin)

您正在尝试更改循环的参数n该参数不是可变的,因此编译器不允许您使用。这正是错误告诉您的内容。

现在,通常来说,要使错误消失,可以使变量可变。但是,您不能使函数参数可变,因此这不是一种选择。

在这里,您想考虑程序的含义。loop功能是否需要将更新后的值传递n回其调用者,还是整个变异都是其内部业务?如果是前者,请参阅@AnyMoose的答案,但是从您的示例和解释中,我怀疑是后者。如果是这种情况,只需对参数进行可变复制并使用它:

let loop n' =
    let mutable x = 0
    let mutable n = n'

    ...

另外,我想指出的是,您编写的程序实际上会无限期地循环(或者直到它始终包裹在最大int值之前),因为您不必增加n每一步,而要增加它。如果您想让程序在下一个冰河世纪之前真正完成,则需要在n每次迭代时减少:

n <- n - 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在F#中编写可变参数函数以模拟类似的Haskell解决方案?

如何在Vala中创建异步可变参数函数

如何创建快速通用的可变参数函数?

如何命名F#函数声明的参数

在F#中创建局部函数

动态创建通道以用作Go中可变参数函数的参数

命名本身就是F#中参数的函数的参数

如何使用 C++ 中的给定伪代码创建一个递归的可变参数函数?

如何在 F# 中创建状态

具有可变类型的F#函数

在F#中,如何访问函数的属性?

尝试创建一个函数,然后在 F# 中通过“不是那个函数”过滤一个序列

如何在F#中创建类型参数抽象类型?

如何在F#中声明可以通过WebJob的JobHost.CallAsync调用的函数?

如何创建具有可变数量的参数的函数?

如何创建带有可变数量的参数的函数变量?

如何访问可变参数模板函数中的参数

有没有办法获取C#中F#的构造函数参数是自动不可变的私有成员功能?

通过F#中的条件公式创建循环序列

如何创建F#天蓝色函数

在F#中,是否可以将对可变的默认值的引用作为参数传递?

在JavaScript中,通过“ new Function()”创建函数时如何设置函数参数名称?

C中的可变参数函数

函数参数中的可变借位

函数中参数的可变顺序

C 函数中的可变参数

使用F#中的类(可变性与不变性/成员与自由函数)

如何在SWIG中包装可变参数模板类的可变参数模板成员函数?

语法:在 F# 中返回可区分联合的参数的函数?(函数参数的模式匹配)