请考虑,鉴于x
一个C程序,将返回y
和z
这样y + z * 2 = x
,为尽可能小的y
。粗略地说,我可以创建一个嵌套的循环:嵌套循环和函数式编程
for(y = 0; y < x; ++ y){
for(z = 0; z < x; ++z){
if(y + 2 * z == x){
printf("%d + 2 * %d = %d", y, z, x);
}
}
}
我怎么能在功能的方式翻译这种嵌套循环?这可行吗?是合理还是我只是错误的判断方法?到目前为止,我最好的尝试:
let foo x =
let rec aux (y, z, q) =
match (y + z * 2) with
r when r = q -> (y, z)
|_ -> aux(y + 1, z + 1, q) //How to check different values of z
aux(0, 0, x) //for each value of y?
这是行不通的,因为它只会增加双方y
和z
。如何检查z的不同值,对于y的每个值?
程序语言(如C)和功能语言(如F#)在编程时代表了两种不同的范例。因此,你不能真正做他们之间的直接翻译(你*可以*,但它不会很好的翻译,很可能相反),你经常不得不*。 –
至于你的功能片段的评论中的问题 - >使用第二个递归函数。假设这是关于无符号整数的,为什么不直接计算结果? –
'y = x%2; z = x/2'会做....(并且可以用功能代码表示) –