26 lines
691 B
Haskell
26 lines
691 B
Haskell
module KarelSemantics where
|
|
|
|
import Prelude hiding (Either(..))
|
|
import Data.Function (fix)
|
|
|
|
import KarelSyntax
|
|
import KarelState
|
|
|
|
|
|
-- | Valuation function for Test.
|
|
test :: Test -> World -> Robot -> Bool
|
|
test = undefined
|
|
|
|
-- | Valuation function for Stmt.
|
|
stmt :: Stmt -> Defs -> World -> Robot -> Result
|
|
stmt Shutdown _ _ r = Done r
|
|
stmt PickBeeper _ w r = let p = getPos r
|
|
in if hasBeeper p w
|
|
then OK (decBeeper p w) (incBag r)
|
|
else Error ("No beeper to pick at: " ++ show p)
|
|
stmt _ _ _ _ = undefined
|
|
|
|
-- | Run a Karel program.
|
|
prog :: Prog -> World -> Robot -> Result
|
|
prog (m,s) w r = stmt s m w r
|