我刚刚开始使用F#并且有一个基本问题.
这是代码:
let rec forLoop body times =
if times <= 0 then
()
else
body()
forLoop body (times - 1)
Run Code Online (Sandbox Code Playgroud)
我没有得到如何定义变量它是一个值和不可变的概念.这里,值正在变化以循环.这与C#中的变量有什么不同?
它没有改变.你使用递归.该变量保持不变,但减去一个并传递给函数.在这种情况下功能相同.
堆栈看起来像
forLoop body 0
|
forLoop body 1
|
forLoop body 2
Run Code Online (Sandbox Code Playgroud)
提供的代码不会在C#中表示为for循环,它将是递归的(类似这样):
void ForLoop(int times, Action body)
{
if (times <= 0)
{
return;
}
else
{
body();
ForLoop(times - 1, body);
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,该值times在任何时候都不会改变.