次の要件を使用して、自分の演習で解決策を見つけようとします。
- 特定のシーケンスに対してオブジェクトを移動する必要があります。
- シーケンスはアクションで構成されます。
可能なアクションは次のとおりです: F、L、R
- F : 前方に移動
- L : 左に 90°回転
- R : 右に 90°回転
シーケンスは、次のように文字列で表されます。
"FFLRLFF"
上記のシーケンスを解析 (およびエラーを処理) してから、次のように各アクションを関数にバインドします。
parseAction :: Char -> Either String (a -> a)
parseAction 'F' = Right moveForward
parseAction 'L' = Right turnLeft
parseAction 'R' = Right turnRight
parseAction s = Left ("Unkown action : " ++ [s])
-- Implementation omitted
moveForward :: a -> a
turnLeft :: a -> a
turnRight :: a -> a
今私が欲しいのは、次の署名を持つものです:
parseSequence :: String -> Either String [(a -> a)]
関数を何度も使用して完全なシーケンスを解析したいのですparseAction
が、それが Left を返すと失敗します。この機能をどのように実装できるかについて、私は立ち往生しています。
あなたはなにか考えはありますか ?