Haskell 模拟评估者
我在用Haskell模拟一个评估员。它应该很简单,但我无法调试 这里我将Haskell 模拟评估者,haskell,functional-programming,Haskell,Functional Programming,我在用Haskell模拟一个评估员。它应该很简单,但我无法调试 这里我将State定义为一个查找函数(String->Int),一个初始状态(empty,异常变量求值0),以及extend向基本环境添加新键(及其值): type State = String -> Int extend :: State -> String -> Int -> State extend base key val = \x -> if key == x
State
定义为一个查找函数(String->Int
),一个初始状态(empty
,异常变量求值0
),以及extend
向基本
环境添加新键(及其值):
type State = String -> Int
extend :: State -> String -> Int -> State
extend base key val = \x -> if key == x
then val
else base key
empty :: State
empty = \x -> 0
当我测试程序时:
aState = extend empty "A" 5
bState = extend aState "B" 4
cState = extend bState "C" 3
我认为cState
应该等价于一个函数:
\x -> if x == "C"
then 3
else if x == "B"
then 4
else if x == "A"
then 5
else 0
但是相反,我得到了cState“B”==0
和cState“A”==0
我看不出
extend
有什么问题,有人能给我解释一下吗?在您的else
语句中,您在每个递归中搜索key
(而不是x
):else base key
。用以下方法修复它:
extend :: State -> String -> Int -> State
extend base key val = \x -> if key == x
then val
else base x
顺便说一句,你可以写:
empty :: State
empty = \_ -> 0
因为empty
返回0
,而不考虑输入