User:Bd/BCT
		
		
		
		Jump to navigation
		Jump to search
		
module BCT (bct) where
import Debug.Trace
-- | Execute a BCT program, returning its data tape.
--   Since no BCT program actually modifies any values in the data tape,
--   we treat the delete operation (False) as a return-value-to-environment
--   action.
--
--   The whole program is of course executed lazily.
bct :: [Bool] -> [Bool] -> [Bool]
bct p d = go (cycle p) d
    where
        go _ [] = []
        go (False:program) (h:t) = h:go program t
        go (True:next:program) dat@(h:_)
            | h
            = go program (dat ++ [next])
            | otherwise
            = go program dat