【发布时间】:2017-01-28 14:03:14
【问题描述】:
我的任务是在 Haskell 中模仿命令式编程语言的特性。现在我正在努力为字符串赋值。关键是我必须使用 Env 和 Sigma 类型。 Env 将 String(变量名)分配给 Location Loc。 Sigma 将 Location 分配给特定值。代码如下:
type Loc = Int --Loc for Location
type Env = String -> Loc
type Sigma = Loc -> Int
assign :: String -> Int -> Env -> Sigma -> Sigma
assign name value env sig = \input -> ??
现在我不知道如何在我的程序的函数assign 中做到这一点。该函数应将字符串名称和位置 loc 存储在函数 env 中,并将相同的位置 loc 和值 val 存储在函数 sig 中,必须由整个函数'assign'返回。
用例如测试它env = \"test"->42、sig= \42->6(sig 和 env 只是暂时用于测试用例)、assign "x" 45 env sig 然后 sig (env "x") 应该返回 45。如果不将 Locations 分配给 env 和 sig,我不知道你是如何管理它的。你能帮我告诉我该怎么做吗?
【问题讨论】:
-
你能展示一下
sig的实现吗? -
@WillemVanOnsem 实施是什么意思? sig 只是函数的 Sigma 类型参数
-
那么“那么
sig (env "x")应该返回45”是什么意思? -
@leftaroundabout 哦,对了。这仅适用于测试用例。在我的问题中更正了它
-
你的测试用例是错误的。此外,您的
assign类型签名或测试用例中的env函数都是错误的。如果类型签名正确,您的测试用例可能类似于let { env x = case x of { "test" -> 42; "x" -> 43 }; sig = \42 -> 6 } in let { sig2 = assign "x" 45 env sig } in sig2 (env "x")
标签: haskell