我尝试通过自己的练习找到解决方案,并满足以下要求:
- 我们需要根据给定的序列移动对象。
- 序列由动作组成。
以下是可能的操作: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 时失败。我被困在如何实现这个功能上。
你有什么想法 ?