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