返回值给中断函数

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# 函数中“返回”的正确方法是什么?

Asi*_*sik 6

高阶函数当然很好,但在某些时候必须有人编写一个循环(例如实现高阶函数),而最终就是你,所以知道如何在 F# 中编写循环很好。forF# 中的循环没有提前返回,但其他类型的循环确实允许这样做:

// 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)