0 haskell
我有一个简单的问题.Haskell向我抛出57 - 未定义变量"f"错误,我不知道为什么.如果你能看一下,我会很感激的.码:
eval :: Expr -> Environment -> Float
eval expr env = eval' expr
where
eval' :: Expr-> Float
eval' (Num num) = num
eval' (App app exprs) = foldl1 (f) (map eval' exprs) -- **Line 57**
eval' (Id id) = 5
where
f = getFunctionForApp app -- **f is here**
getFunctionForApp :: String -> (Float->Float->Float)
getFunctionForApp "+" = (+)
getFunctionForApp "-" = (-)
getFunctionForApp "*" = (*)
getFunctionForApp "/" = (/)
getIdVal :: String -> Environment -> Float
getIdVal id ((curId, val):envrs)
|curId == id = val
| otherwise = getIdVal id envrs
Run Code Online (Sandbox Code Playgroud)
类型定义:
data Expr = Num Float | Id String | App String [ Expr ]
deriving (Eq, Ord, Show)
type Environment = [ ( String, Float ) ]
Run Code Online (Sandbox Code Playgroud)
phi*_*ler 11
我不能真的说出来,而是试图解密代码后,我猜你的意思如下:
eval :: Expr -> Environment -> Float
eval expr env = eval' expr
where eval' :: Expr -> Float
eval' (Num num) = num
eval' (App app exprs) = foldl1 (f) (map eval' exprs)
where f = getFunctionForApp app -- that has to be in this line
eval' (Id id) = 5
Run Code Online (Sandbox Code Playgroud)
(现在使用格式化的代码我确定就是它.where子句仅适用于该子句之前的行)
pig*_*ker 10
问题是内部where子句附加到该行
eval' (Id id) = 5
Run Code Online (Sandbox Code Playgroud)
但是上面这条线需要它
eval' (App app exprs) = foldl1 (f) (map eval' exprs) -- **Line 57**
Run Code Online (Sandbox Code Playgroud)
通常,函数定义的每一行都有自己的范围.甲where子句可以指从它的安装于线图案的变量,和范围在仅该行的其余部分.
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |