使用循环以循环访问语句
你已进入程序中需要多次执行一组语句的位置。 你可能正在使用需要循环访问的列表类型结构。 或者,在满足特定条件之前,通常需要重复操作。 在这些情况下,可以使用循环。
循环
循环会循环访问一系列值。 对于每个值,代码会执行某些操作,例如在屏幕上打印结果或在操作中使用值。 F# 有三种类型的循环,可供你使用:
for...in:for...in构造假设你有一个可循环访问的可枚举集合。 它会循环访问集合中的每个值。for...to:for...to循环从此循环循环访问的位置开始和结束。 它会循环访问,直到达到循环变量的值。while...do:while...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...in 和 for...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,则当用户猜测正确时,循环就会结束。