私は簡単な質問があります。ハスケルが私に57 - Undefined variable "f" error
を投げているのですが、私はなぜそれが分かりませんか?もしあなたがこれを見ることができれば、私はそれを感謝します。未定義の変数、Haskell
コード:
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
タイプの定義:ブロックのみを直接その前の場合と、ないeval'
機能のすべての場合に適用される
data Expr = Num Float | Id String | App String [ Expr ]
deriving (Eq, Ord, Show)
type Environment = [ (String, Float) ]
私は正直に答えはわかりませんが、私はどこのブロックが文章の後に来なければならないと思いました。言い換えれば、1行上のブロック全体を動かしてみましたか? – Ramy