2016-08-05 65 views
0

我学习Haskell对我自己和我通过锻炼在独联体homework 194困惑:CIS 194锻炼混乱

练习1之前,我们就可以开始评估表达式和语句,我们需要一些方法来存储并查找变量的状态。我们将一个状态定义为类型为String - > Int的函数。这使得查找变量的值非常容易;在状态中查找 “A”的值,我们只需调用状态“A”。每当我们分配一个变量时,我们都想更新程序状态。实现以下功能: 延长::状态 - >字符串 - >内部 - >国家

提示:您可以使用输入状态作为一个黑盒子为其他 比你分配一个变量。

例子: 让ST” =延长ST圣 “A” 5 ” “A” == 5

我根本不明白它的要求和示例。这是如何提供查找“A”价值的方法?由于State被定义为type State = String -> Intextend的类型是String->Int->String->Int->State

回答

4

关闭。鉴于

type State = String -> Int 
extend :: State -> String -> Int -> State 

“真正的” 类型的extend时(注意括号)

extend :: (String -> Int) -> String -> Int -> (String -> Int) 

-- because -> is right-associative 
extend :: (String -> Int) -> String -> Int -> String -> Int 

的第一个参数extendString -> Int类型的函数,而不是一个String值。


extend并不意味着查找“A”的值;它意在创造一个新的状态,其中“A”的值具有给定的值。例如:

let st' = let st "A" = 3 in extend st "A" 5 
let st'' = extend "B" 2 st' 

st'仰视 “A” 应该产生的5的值,不3.同样地, “B” 中未st'定义,但在st''

>>> st' "A" 
5 
>>> st'' "A" 
5 
> st' "B" 
*** Exception: <interactive>:2:5-15: Non-exhaustive patterns in function st' 
>>> st'' "B" 
2  
+1

很抱歉,如果这是真的小学,但这是否意味着(在你的例子)'ST “A”'是'(与字符串>智力)'了'extend'的部分(即'State')类型?如果是,那么它应该跟着一个字符串? – Liumx31

+1

没错。在调用'extend st'A“5'时,'st'需要有'String - > Int'类型。在'let st'A'= 3'表达式中,我使用模式匹配来定义一个部分函数st,它在“A”的输入上返回3。没有为任何其他输入值定义“st”。如果你正确地定义了'extend',那么'st''也不会被定义为任何其他输入,并且'st''只被定义为“A”和“B”。 – chepner

+0

其实我想知道'st'A''在'extend st“中是否有'5'类型(String - > Int),那么不应该在'extend'的后面加上'String' '(String - > Int)[它是st“A”] - > String - > Int ...' – Liumx31