在haskell中实现过程for循环,跟踪多个变量

时间:2019-03-12 12:23:19

标签: haskell

我正在尝试进行一些alpha-beta修剪,here's an example of an algorithm我可以理解,并且我想到的算法,当我认为自己将如何解决该问题时。

但是我必须用Haskell编写这篇文章,并且正在努力将我的思维方式从过程for循环和变量等转换为Haskell的功能方法。

让我很困扰的部分是如何写

function alphabeta(node, α, β, player) is
    .
    .
    value := −∞
    for each child of node do
        value := max(value, alphabeta(child, α, β, otherPlayer))
        α := max(α, value)
        if α ≥ β then
            break (* β cut-off *)
    return value
    .
    .

我意识到我可以折叠进行for-loop,例如

foldl (max ... alphabeta ...) -∞ (children node)

但是我看到我需要在α ≥ β时退出循环。

我想知道是否可以切换到使用scanldropWhile,也许像

head $ dropWhile (<b) $ scanl (max ... alphabeta ...) -∞ (children node)

但没有!看来我打算将<​​em> changing 变量α与β进行比较。

for循环不断变化并使用(递归)两个不同的变量αvalue,这就是让我失望的原因,我不知道如何“跟踪”两个不同的变量。相互影响的变量(例如,至少在我看来,找出递归解很困难,因为我可能尝试单变量循环)。

我只是想知道如何做才能更好地了解如何解决此问题。

0 个答案:

没有答案