我正在研究一种在Haskell中表示内存的方式,看起来像这样......
data MemVal = Stored Value | Unbound
deriving Show
type Memory = ([Ide],Ide -> MemVal)
当标识符被调用时,它被添加到标识符列表中。如果程序中发生错误,我希望能够调用最新的标识符。到目前为止,我有这个......
display :: Memory -> String
display m = "Memory = " ++ show (map (snd m) (fst m)) ++ " "
但是想知道是否有办法将标识符的名称映射到(fst m)以及函数(snd m),因此输出将类似于......
Memory = [sum = stored Numeric 1, x = stored Boolean true]
谢谢。
答案 0 :(得分:1)
你可能想要这样的东西
display :: Memory -> String
display (ides, mem) =
"Memory = [" ++ unwords (map (\x -> x ++ "=" ++ mem x) ides) ++ "]"
答案 1 :(得分:1)
我猜这就是你所追求的:
import Data.List (intercalate)
display (Memory ids f) = "Memory = [" ++ (intercalates ", " assigns) ++ "]"
where assigns = [ show i ++ " = " ++ show (f i) | i <- ids ]
此处assigns
列表如下:
[ "sum = stored Numeric 1", "x = stored Boolean true", ...]
和intercalate ", " assigns
将字符串连接在一起。
我使用了解构来避免引用fst ...
和snd ...