如何在 F# 中编写循环,以便将上一步中 a 的值分配给 b 等等?

问题描述 投票:0回答:1

所以,我有一个有点棘手的任务需要解决,而且我对函数式编程完全陌生。 有一个布尔变量列表(既不是字符串也不是字符,因为算法只接受布尔变量,因此它们被转换)

vars = [p;q;r] 并且有 2 种算法,即 A 和 B 以及一个布尔方程 eq1 = p & q 循环应该执行如下操作:

Step1 :let x = A ((B vars[0]) eq1) (算法 B 对 vars[0] 起作用,然后算法 A 对这个和 eq1 一起起作用) Step2 : let x1 = A ((B vars[1]) x) (在下一步中,eq1 应替换为上一步的答案,算法 B 应适用于 vars[1] 第三步:令x2 = A ((B vars[2]) x1)

在其他语言中,这可以写成带有逻辑的循环

foreach (i in vars){
 x = (A (B vars[i]) eq1)
 eq1 = x } 

不确定如何在 f# 中编写这样的循环

loops f# f#-interactive
1个回答
0
投票

由于该算法看起来不需要循环的退出条件,我相信您可以简单地使用

x
eq1
的可变变量来转换它,并在普通的
for
循环中更新。

let mutable x = ... // default value for x, pre loop
let mutable eq1 = ... // default value for eq1, pre loop
for i in vars do
  x <- A (B vars[i]) eq1
  eq1 <- x

备注:

  • F# 并不强制要求您采用“纯函数式”方法,也不禁止可变性。
  • 我不清楚
    i in vars
    vars[i]
    在您自己的代码示例中意味着什么,它会澄清您是否可以展示完整的工作示例及其编写的语言。
© www.soinside.com 2019 - 2024. All rights reserved.