查找最大整数的索引

gol*_*iii 2 haskell integer list

我涉嫌Haskell,偶然发现路途颠簸

我想编写一个AI用来在简单棋盘游戏中选择一行的函数。所述游戏中的棋盘由整数列表表示。像这样:

board = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

板上一行的数字的索引+ 1及其Int本身就是该行上剩余的块数。我旨在使此功能起作用的方法是,首先在列表中找到最大的数字,然后以的形式返回此数字(索引+ 1)IO Int

这是我在努力的地方,因为我似乎无法在网上找到任何好的答案

到目前为止,这是我正在使用的:

-- Returns index of row with largest number along the number itself
aiHelper :: Board -> (Int, Int)
aiHelper xs = maximumBy (comparing fst) (zip xs [1..])

-- Returns row with largest number as IO Int
aiRow :: Board -> IO Int
aiRow xs = do
              let y = snd $ aiHelper xs
              return $ y
Run Code Online (Sandbox Code Playgroud)

我不太确定这段代码是否符合我的期望,是否有更简单,更干净的代码解决方案?

Mar*_*ann 5

您可以像这样简化代码:

aiRow :: Board -> IO Int
aiRow xs = return $ snd $ aiHelper xs
Run Code Online (Sandbox Code Playgroud)

或者,通过减少Eta来实现:

aiRow :: Board -> IO Int
aiRow = return . snd . aiHelper
Run Code Online (Sandbox Code Playgroud)

但是,实际上,您不需要返回IO Int。为什么不只是以下内容?

aiRow :: Board -> Int
aiRow = snd . aiHelper
Run Code Online (Sandbox Code Playgroud)

但是,此时您可能已经低于Fairbairn阈值