6

私はまだ、アロー表記と Haskell で定義されたアロー型クラスのセマンティクスとの類似点を理解しようとしています。特に、この質問には、矢印表記で書かれた小さなカウンターの非常に標準的な例があるようです。

counter :: ArrowCircuit a => a Bool Int
counter = proc reset -> do
        rec     output <- returnA -< if reset then 0 else next
                next <- delay 0 -< output+1
        returnA -< output

これを矢印表記なしで Haskell2010 に変換する方法を教えてもらえますか?

4

2 に答える 2

3

機能コードの並列処理は、状態 op を使用することです。ひだに

import Data.List

counter :: (Int, Int) -> Bool -> (Int, Int)
counter (_, previous_next) reset  =
   let output = if reset then 0 else previous_next
       next = output +1
   in (output, next)

runCounter :: [Bool] -> (Int, Int) 
runCounter = foldl' counter (0,1)

main = do
   let resets = [True, False, True, False, False]   
       result = fst $ runCounter resets
   print result 
于 2014-08-12T13:55:21.997 に答える