簡體   English   中英

Haskell:返回值,狀態和狀態單子

[英]Haskell: return value, state, and state monads

我正在做一個功能

(a->Bool) -> [a] -> State [a] [a]

我想知道是否有一種簡單的方法來遍歷列表,該列表存儲未通過謂詞作為狀態的“失敗”項目和將最終返回的“通過”項目作為值? 您將看到返回值和狀態。 樣品:

*CL> runState (func (<3) [1, 2, 3]) []
([1, 2], [3])
*CL> runState (func even [1, 2, 3]) [10]
([2], [10, 1, 3])

我一直在努力尋找答案,但在這種特定情況下還沒有找到任何東西。 我知道我可以像以前一樣做不同的事情,但是我特別想知道是否可以按照上述方式做。

您實際上不需要為此使用狀態,因為您可以返回一對(passed, failed)但是您可以執行以下操作:

partitionSt :: (a->Bool) -> [a] -> State [a] [a]
partitionSt f l = do
  let (passed, failed) = partition f l
  s <- return passed
  put failed
  return s

要么

partitionSt f l = return passed <* (put failed)
  where (passed, failed) = partition f l

好吧,我知道了。 我應該綁定返回值和狀態的下一次迭代並返回它,否則只需更新狀態並進行迭代即可。 Lee通過向我展示我可以綁定返回值,確實使我走上了正確的軌道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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