diff options
| -rw-r--r-- | src/Grasp/Interpreter.hs | 24 | 
1 files changed, 22 insertions, 2 deletions
| diff --git a/src/Grasp/Interpreter.hs b/src/Grasp/Interpreter.hs index 35a3de0..8cfe502 100644 --- a/src/Grasp/Interpreter.hs +++ b/src/Grasp/Interpreter.hs @@ -145,7 +145,7 @@ setI g ip = do      g' <- case inL of              [] -> return g              _ -> (getStdRandom (randomR (0,length inL))) >>= -                (\x -> return (foldl' (\g n -> reLabel g n (inL !! x)) g outN) ) +                (\x -> return (foldl' (\gr n -> reLabel gr n (inL !! x)) g outN) )      ip' <- updateIP ip nextLN @@ -215,8 +215,28 @@ callI g ip = return (g,ip)  retI :: GraspProgram -> IP -> IO (GraspProgram, IP)  retI g ip = return (g,ip) + +  addI :: GraspProgram -> IP -> IO (GraspProgram, IP) -addI g ip = return (g,ip) +addI g ip = do +    let node = fst . head $ ip +        edges = Graph.out g node + +        argL = targetLabels g (getByLabel "arg" edges) +        outN = targetNodes (getByLabel "out" edges) +        nextLN = targetLNodes g (getByLabel "next" edges) + +    g' <- case argL of +            x | not (all isFloat x) -> error ("Instruction " ++ (show node) ++ +                                            " has non numeric arguments") +            x -> let s = sum . map (read :: String -> Float) $ x +                 in return (foldl' (\gr n -> reLabel gr n (show s)) g outN) + +    ip' <- updateIP ip nextLN + +    return (g',ip') + +  mulI :: GraspProgram -> IP -> IO (GraspProgram, IP)  mulI g ip = return (g,ip) | 
