使用循环以循环访问语句

已完成

你已进入程序中需要多次执行一组语句的位置。 你可能正在使用需要循环访问的列表类型结构。 或者,在满足特定条件之前,通常需要重复操作。 在这些情况下,可以使用循环。

循环

循环会循环访问一系列值。 对于每个值,代码会执行某些操作,例如在屏幕上打印结果或在操作中使用值。 F# 有三种类型的循环,可供你使用:

  • for...infor...in 构造假设你有一个可循环访问的可枚举集合。 它会循环访问集合中的每个值。
  • for...tofor...to 循环从此循环循环访问的位置开始和结束。 它会循环访问,直到达到循环变量的值。
  • while...dowhile...do 循环不会像前两个构造那样以可枚举集合为中心。 相反,它会循环,直到满足条件。

将 for...in 循环用于集合中的每个值

for...in 构造对可枚举集合进行操作。 它实现 System.Collections.IEnumerable 并包括列表、序列、数组和其他类型。 下面是 for...in 循环的语法:

for <pattern> in <enumerable-expression> do
  <body-expression>

请务必了解一些关键字:

  • 模式:模式可以是当前项或元组。 例如,循环访问序列。 下面的代码是模式为当前值 i 时的示例。 for 循环访问 list 列表,然后打印集合中的每个值:

    let list = [1; 2; 3; 4; 5]
    for i in list do
       printf "%d " i
    
  • 可枚举表达式:可枚举表达式是要循环访问的内容。 它可能是列表或序列。

  • 正文表达式:正文表达式是执行计划任务的方法,例如打印或进行计算。

使用 for...to 循环,直到产生循环变量

for...to 构造与 for...in 循环略有不同。 for...to 循环变量构成边界,用于停止循环访问。 语法的外观如下所示:

for <identifier = start> [ to | downto ] <finish> do
    <body-expression>

请务必了解以下语法组件:

  • identifier = start:此语法是赋值。 通常要决定在循环访问过程中要跟踪哪些变量,以及应从哪个值开始。
  • [to | downto]:可以在两个不同的关键字之间进行选择。 to 表示循环会循环访问至该数字。 如果使用 downto,则标识符的值将减小,直到达到该数字。

下面是使用 for...to 循环的示例:

for i = 1 to 10 do
  printfn "%i " i  // prints 1 2 3 4 5 6 7 8 9 10

此循环将打印 1 至 10 之间的所有值,包括 10。 让我们也看看使用 for...downto 构造的示例。 此构造的工作方式类似于 for...to,但与之相反。 以下代码演示如何打印从 10 到 1 的值,包括 1:

for i = 10 downto 1 do
  printfn "%i" i  // prints 10 9 8 7 6 5 4 3 2 1

使用 while...do 循环,直到满足条件

while...do 构造与 for...infor...to 构造不同。 while...do 不会针对集合进行循环访问。 如果逻辑需要循环,直到满足条件,则改为使用 while...do 循环。 例如,接受命令行参数,直到用户输入“quit”

此代码显示 while...do 构造的语法:

while <test-expression> do
  <body-expression>

猜谜游戏就是使用 while...do 构造的一个示例:

open System

let mutable quit = false
let no = 11
while not quit do
   printf "Guess a number: "
   let guess = Console.ReadLine() 
   let guessNo = int guess
   if guessNo = no then
      quit <- true
      printfn "You guessed correctly %i is the secret number" no
   else
      printfn "%i is incorrect" guessNo

此代码执行一组语句,直到变量 quit 的值为 true。 将 quit 的值设为 true,则当用户猜测正确时,循环就会结束。