映射haskell中的多个函数

时间:2016-06-07 08:38:40

标签: haskell

我正在研究一种在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]

谢谢。

2 个答案:

答案 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 ...