summaryrefslogtreecommitdiff
path: root/Fractran/Interpreter.hs
blob: 0427aedf814b5b6c55b7d7ff16c2bded34e65291 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
module Interpreter (
    fractran
	) where


import Parser




fractran :: FractranProgram -> [Int]
fractran program =
    let prog = map (\(x,y) -> (fromIntegral x, fromIntegral y)) (fractions program)
        f = (\p v -> if (p == [])
                     then []
                     else let (curX, curY) = head p
                              newV = v * curX / curY
                          in if (isInt newV)
                             then newV : (f prog newV)
                             else f (tail p) v)
        result = map round (f prog (fromIntegral (initialValue program)))
    in value : result