F# 理解递归调用和函数调用

F# 理解递归调用和函数调用,f#,F#,在询问了一位用户之后,一位用户非常友好地给了我这个答案,我很难理解它 member private this.MinMaxAlphaBeta (board : Board, isMin : bool, alpha : int, beta : int) : int = let point = this.BoardPoint (board) if point <> -2 then point else let UpdateAlphaBeta x a

在询问了一位用户之后,一位用户非常友好地给了我这个答案,我很难理解它

member private this.MinMaxAlphaBeta (board : Board, isMin : bool, alpha : int, beta : int) : int =
    let point = this.BoardPoint (board)
    if point <> -2 then point
    else
        let UpdateAlphaBeta x alpha beta =
            match x with
            | 10 ->
                if isMin then
                    beta, alpha, beta
                else
                    alpha, alpha, beta
            | _ ->
                if isMin && x < beta then
                    x, alpha, x
                elif not isMin && x > alpha then
                    x, x, beta
                else
                    x, alpha, beta

        let rec loop x alpha beta i =
            if i > 8 then x
            else
                let x', alpha', beta' =
                    let x =
                        let b = Board (board)
                        if b.SetBoardBool i then
                            // NOTE : This is a _recursive_ call!
                            this.MinMaxAlphaBeta (b, not isMin, alpha, beta)
                        else 10

                    UpdateAlphaBeta x alpha beta

                let x_new =
                    if isMin then min x x' else max x x'

                loop x_new alpha' beta' (i + 1)

        let x_initial = 0
        loop x_initial alpha beta 0   // Start at the zero-th element.
让UpdateAlphaBeta x alpha beta这个函数如何将结果返回给它的调用者

let rec loop x alpha beta i=有另一个函数let x',alpha',beta'从何处调用

最小x’否则最大x’x和x有什么区别

F对let的最后一行具有隐式返回,因此所有标记的行都是潜在的返回值

let UpdateAlphaBeta x alpha beta =
    match x with
    | 10 ->
        if isMin then
            beta, alpha, beta //return
        else
            alpha, alpha, beta //return
    | _ ->
        if isMin && x < beta then
            x, alpha, x //return
        elif not isMin && x > alpha then
            x, x, beta  //return
        else
            x, alpha, beta //return
让x',alpha',beta'基本上是让a,b,c=1,2,3的复杂版本

最小值x'是从2取x和x'的最小值


那么x',alpha',beta'在UpdateAlphaBeta x alpha beta中更新?那么x',alpha',beta'在UpdateAlphaBeta x alpha beta?@Taufiq x'中更新。。。被分配到UpdatealPhax的结果。。。