我正在学习Haskell,我对CIS 194 homework的练习感到困惑:
练习1.在开始评估表达式和语句之前,我们需要一些方法来存储和查找变量的状态。我们将State定义为String类型的函数 - >诠释。这使得查找变量的值非常容易;查找价值 " A"在州,我们简单地称国家" A"。每当我们分配变量时,我们都希望更新程序状态。实现以下功能: extend :: State - >字符串 - > Int - >状态
提示:您可以将输入状态用作其他变量的黑盒子 而不是你指定的那个。
实施例: 让st'=扩展st" A"五 在st'" A" == 5
我从根本上不了解它的问题和例子。这如何提供一种查找" A"?的价值的方法由于State
定义为type State = String -> Int
,extend
是否有String->Int->String->Int->State
类型?
答案 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