【发布时间】:2014-11-30 18:08:35
【问题描述】:
我有一个我写的代码块不能编译,因为 if/then/else 块没有以编译器理解的方式设置,但是我不知道如何重写它,以便它可以。
playRandomly board = do
let vMoves = getValidMoves board board
if vMoves == [] then return [] else
rMove <- uniform vMoves
let Just nBoard = runMove board rMove
rest <- playRandomly nBoard
return (rMove : rest)
基本上,如果列表为空,函数uniform 将除以零,所以我需要一种方法来捕获它并在继续执行 do 语句之前返回空列表。有什么建议吗?
【问题讨论】:
-
只是为了好玩,我粘贴了一个备用的重新样式here。不将此作为答案,因为它并没有真正回答“什么缩进使这项工作?”的问题。
标签: haskell monads do-notation