# HG changeset patch # User atton # Date 1477483993 0 # Node ID ffa16824391684c54f3fc7d1a6f6f16407e9f22c # Parent 17f5b8304641725dc9987c76ac847df3efeea2a5 Fix eval1 diff -r 17f5b8304641 -r ffa168243916 arith/Arith.hs --- a/arith/Arith.hs Wed Oct 26 08:39:14 2016 +0000 +++ b/arith/Arith.hs Wed Oct 26 12:13:13 2016 +0000 @@ -31,6 +31,7 @@ eval1 (TmIf TmTrue t _) = return t eval1 (TmIf TmFalse _ f) = return f eval1 (TmIf con t f) = eval1 con >>= (\con' -> return (TmIf con' t f)) +eval1 (TmSucc (TmPred t)) = return t eval1 (TmSucc t) = eval1 t >>= (\t' -> return $ TmSucc t') eval1 (TmPred TmZero) = return $ TmZero eval1 (TmPred (TmSucc t)) @@ -39,7 +40,8 @@ eval1 (TmIsZero TmZero) = return $ TmTrue eval1 (TmIsZero (TmSucc t)) | isNumerical t = return $ TmFalse - | otherwise = eval1 t >>= (\t' -> return $ TmIsZero t') + | otherwise = eval1 (TmSucc t) >>= (\t' -> return $ TmIsZero t') +eval1 (TmIsZero t) = eval1 t >>= (\t' -> return $ TmIsZero t') eval1 t = Left $ "Cannot eval: " ++ show t @@ -52,3 +54,13 @@ evalWithStep :: Term -> String evalWithStep = execWriter . evalWithWriter + + + +-- Terms from arith/test.f + +sampleTerm1 = TmTrue +sampleTerm2 = TmIf TmFalse TmTrue TmFalse +sampleTerm3 = TmZero +sampleTerm4 = TmSucc (TmPred TmZero) +sampleTerm5 = TmIsZero (TmPred (TmSucc (TmSucc TmZero)))