一般的なステートメントを取り込んで評価し、評価されるたびに各ステップを表示するプログラムを作成しようとしています。
たとえば、一連の割り当てステートメントがある場合、次のように実行する必要があります。
割り当てステートメント 1 の評価
評価結果を表示 1
割り当てステートメント 2 の評価
評価結果の表示 2
現在、最終結果のみを表示しています。コードは
> evalS_maybe :: Statement -> Store -> Maybe Store
> evalS_maybe w@(While e s1) s = evalS_maybe (If e
> (Sequence s1 (While e s1))
> Skip)
> s
> evalS_maybe Skip s = Just s
> evalS_maybe (Sequence s1 s2) s = do
> sq <-evalS_maybe s1 s
> evalS_maybe s2 sq
> evalS_maybe (Assign x e ) s = do
> ag <-evalE_maybe e s
> return ( Map.insert x ag s )
> evalS_maybe (If e s1 s2) s = do
> b2 <- evalE_maybe e s
> case b2 of
> BoolVal True -> evalS_maybe s1 s
> BoolVal False -> evalS_maybe s2 s
> _ -> return s
編集:
使用される残りのデータ型は次のとおりです。
> type Variable = String
> data Statement =
> Assign Variable Expression
> | If Expression Statement Statement
> | While Expression Statement
> | Sequence Statement Statement
> | Skip
> deriving (Show)
> data Expression =
> Var Variable
> | Val Value
> | Op Bop Expression Expression
> deriving (Show)
> data Bop =
> Plus
> | Minus
> | Times
> | Divide
> | Gt
> | Ge
> | Lt
> | Le
> deriving (Show)
> data Value =
> IntVal Int
> | BoolVal Bool
> deriving (Show)
> type Store = Map Variable Value
誰でも助けてもらえますか?前もって感謝します!