Chương trình sau sử dụng trạng thái di chuyển ngược được cung cấp bởi đơn vị Tardis.Retrocausality trong Haskell: Từ Tardis đến RevState
{-# LANGUAGE RecursiveDo #-}
import Control.Monad.Tardis
lastOccurrence :: Int -> Tardis [Int]() Bool
lastOccurrence x = mdo
sendPast (x : xs)
xs <- getFuture
return (not (elem x xs))
lastOccurrences :: [Int] -> Tardis [Int]() [Bool]
lastOccurrences xs = mapM lastOccurrence xs
main :: IO()
main =
print $ flip evalTardis ([],()) $ lastOccurrences [3,4,6,7,4,3,5,7]
Làm cách nào để thay thế đơn nguyên mẫu Tardis bằng đơn reverse State? Với đề nghị sau đây của tôi, main
vòng lặp mãi mãi thay vì in [False,False,True,False,True,True,True,True]
như với chương trình trên.
{-# LANGUAGE RecursiveDo #-}
import Control.Monad.RevState
lastOccurrence :: Int -> State [Int] Bool
lastOccurrence x = mdo
put (x : xs)
xs <- get
return (not (elem x xs))
lastOccurrences :: [Int] -> State [Int] [Bool]
lastOccurrences xs = mapM lastOccurrence xs
main :: IO()
main =
print $ flip evalState [] $ lastOccurrences [3,4,6,7,4,3,5,7]
Nếu câu hỏi của bạn không nhận được sự chú ý đầy đủ trên SO, vui lòng ping các tác giả gói như bản thân mình! Trình theo dõi sự cố và thông tin liên hệ của người duy trì thường có thể được tìm thấy trên hackage, ví dụ: http://hackage.haskell.org/package/rev-state –