[英]If/then/else in do statements (Haskell)
我已經編寫了一段無法編譯的代碼塊,因為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語句之前,我需要一種方法來捕獲此錯誤並返回空列表。 有什么建議嗎?
您可以將其余命令包裝在新的do
playRandomly board = do
let vMoves = getValidMoves board board
if vMoves == []
then return []
else do
rMove <- uniform vMoves
let Just nBoard = runMove board rMove
rest <- playRandomly nBoard
return (rMove : rest)
但是,我想警告您,如果多次執行此操作,您的代碼將向外傾斜並變得不可讀。 要解決此問題,您可以拆分功能,或使用monad進行錯誤檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.