我的任务在于模仿Haskell中命令式编程语言的特性。现在我正在努力为字符串赋值。关键是我必须使用Env和Sigma类型。 Env将一个String(变量名)分配给Location Loc。 Sigma将位置分配给特定值。这是代码:
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
函数中执行此操作。该函数应该在函数env中存储String名称和Location loc,并且还在函数sig中存储相同的位置loc和Value val,它必须由整个函数'assign'返回。
用例如测试它env = \"test"->42
,sig= \42->6
(sig和env仅暂时用于测试用例),assign "x" 45 env sig
然后sig (env "x")
应该返回45.我不知道如何管理它将位置分配给env和sig。你能帮助我并告诉我应该做些什么吗?
答案 0 :(得分:2)
提示:
您需要先将input
位置与name
的位置进行比较,即env name
。
当它们相等时,您知道要返回的新值。
如果这些位置不同,您可以访问旧版Sigma
以检索input
位置的旧值。