Cur*_*ouS 5 f# functional-programming
我对 F# 完全陌生(今天开始使用它)并且对函数式编程相对较新(我对 Lisp 的经验很少)。我想通过在满足某个条件时返回一个值来退出函数,以便不执行循环的其余部分。这是我想要做的 C# 插图:
bool CheckRow (int n, int i)
{
for(int j = 0; j < 9; j++)
if (n == sudoku[i][j])
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
我尝试在 F# 中像这样实现相同的功能(数独是一个 array2D):
let CheckRow (n : int) (i : int) : bool =
for j = 0 to 8 do
if (n = sudoku.[i, j]) then
false
true
Run Code Online (Sandbox Code Playgroud)
但是,我在 if 中的 false 处收到以下错误:“该表达式应具有类型单元,但此处具有类型 bool”。从 F# 函数中“返回”的正确方法是什么?
高阶函数当然很好,但在某些时候必须有人编写一个循环(例如实现高阶函数),而最终就是你,所以知道如何在 F# 中编写循环很好。for
F# 中的循环没有提前返回,但其他类型的循环确实允许这样做:
// While loop, imperative style
let checkRow n i =
let mutable clear = true
let mutable j = 0
while clear && j < 9 do
clear <- n <> sudoku.[i, j]
j <- j + 1
clear
// Tail-recursive style - more idiomatic F#
let checkRow n i =
let rec loop j =
if j = 9 then true
elif sudoku.[i, j] = n then false
else loop (j + 1)
loop 0
Run Code Online (Sandbox Code Playgroud)