簡體   English   中英

do語句中的if / then / else(Haskell)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM