請考慮,鑑於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'會做....(並且可以用功能代碼表示) –