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的结果。。。