1
大家。 我對Haskell相當新。Haskell,解析錯誤
我得到這個縮進錯誤,但我不知道爲什麼我得到它。 我指出從哪條線我收到此錯誤的評論。
如果你能幫我糾正我的「func」和「call」,我將不勝感激。
import Data.Maybe
data Operator = Add | Sub | Mul | Div | And | Or | Not | Eq | Less | Great
deriving (Eq, Show)
data Expression = Literal Val
| Prim Operator [Expression]
| Variable String
| If Expression Expression Expression
| Let [(String, Expression)] Expression
| Func [String] Expression
| Call Expression [Expression]
deriving (Show, Eq)
data Val = Num Int
| Bool Bool
| Closure [String] Expression Environment
deriving (Eq, Show)
type Environment = [(String, Val)]
--20
primitive :: Operator -> [Val] -> Val
primitive Add [Num a, Num b] = Num (a+b)
primitive Mul [Num a, Num b] = Num (a*b)
primitive Sub [Num a, Num b] = Num (a-b)
primitive Div [Num a, Num b] = Num (a `div` b)
primitive And [Bool a, Bool b] = Bool (a && b)
primitive Or [Bool a, Bool b] = Bool (a || b)
primitive Not [Bool a] = Bool (not a)
primitive Eq [a, b] = Bool (a == b)
primitive Less [Num a, Num b] = Bool (a < b)
primitive Great [Num a, Num b] = Bool (a > b)
--32
evaluate :: Environment -> Expression -> Val
evaluate e (Literal v) = v
evaluate e (Prim op as) = primitive op (map (evaluate e) as)
evaluate e (Variable x) = fromJust (lookup x e)
evaluate e (If a b c) = evaluate e (if fromBool (evaluate e a) then b else c)
evaluate e (Let bp b) = evaluate ([(x, evaluate e d) | (x,d) <- bp ] ++ e) b
evaluate e (Func str ex) = str ex e
evaluate e (Call ex exl) = [[a, b, C++ (map (evaluate e) exl)] | (a, b, c)<-(evaluate e ex)] --41
--42
fromBool (Bool b) = b
main = do
let x = Variable "x"
func1 = x*2 -- this is where I am getting a "parse error (possibly incorrect indentation)"
func2 = x*5
in print(evaluate [("r",Num 7)] (Call (If (Bool True) func1 func2) [Num 5]))
'let Int x'應該是什麼意思? – bereal 2013-02-12 07:21:11
我們可以告訴你,這不是一個縮進錯誤。如果有的話,請經常觀察可能的**小字。還有一個提示:第n行標記的語法錯誤不必在第n行。它可能是n之前的任何一行。 – Ingo 2013-02-12 07:33:01