changeset 6:ffa168243916

Fix eval1
author atton
date Wed, 26 Oct 2016 12:13:13 +0000
parents 17f5b8304641
children a5cb1e3736a9
files arith/Arith.hs
diffstat 1 files changed, 13 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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)))