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)
我不太确定这段代码是否符合我的期望,是否有更简单,更干净的代码解决方案?
您可以像这样简化代码:
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阈值。