CIS 194运动混乱

时间:2016-08-05 14:14:01

标签: haskell

我正在学习Haskell,我对CIS 194 homework的练习感到困惑:

  

练习1.在开始评估表达式和语句之前,我们需要一些方法来存储和查找变量的状态。我们将State定义为String类型的函数 - >诠释。这使得查找变量的值非常容易;查找价值   " A"在州,我们简单地称国家" A"。每当我们分配变量时,我们都希望更新程序状态。实现以下功能:   extend :: State - >字符串 - > Int - >状态

     

提示:您可以将输入状态用作其他变量的黑盒子   而不是你指定的那个。

     

实施例:    让st'=扩展st" A"五    在st'" A" == 5

我从根本上不了解它的问题和例子。这如何提供一种查找" A"?的价值的方法由于State定义为type State = String -> Intextend是否有String->Int->String->Int->State类型?

1 个答案:

答案 0 :(得分: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

extend的第一个参数是String -> 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