所以,我有一个有点棘手的任务需要解决,而且我对函数式编程完全陌生。 有一个布尔变量列表(既不是字符串也不是字符,因为算法只接受布尔变量,因此它们被转换)
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# 中编写这样的循环
由于该算法看起来不需要循环的退出条件,我相信您可以简单地使用
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
备注:
i in vars
和 vars[i]
在您自己的代码示例中意味着什么,它会澄清您是否可以展示完整的工作示例及其编写的语言。