added better eval
This commit is contained in:
parent
231275f473
commit
622dce0e57
1 changed files with 13 additions and 6 deletions
19
y.hs
19
y.hs
|
@ -18,16 +18,14 @@ data LispVal = Atom String
|
||||||
-- The program (in IO)
|
-- The program (in IO)
|
||||||
-- execute the arguments given in parameters
|
-- execute the arguments given in parameters
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = getArgs >>= print . eval . readExpr . head
|
||||||
args <- getArgs
|
|
||||||
putStrLn (readExpr (args !!0))
|
|
||||||
|
|
||||||
-- ReadExpr will take a program as input
|
-- ReadExpr will take a program as input
|
||||||
-- and will return the result of a parseExpr
|
-- and will return the result of a parseExpr
|
||||||
readExpr :: String -> String
|
readExpr :: String -> LispVal
|
||||||
readExpr input = case parse parseExpr "lisp" input of
|
readExpr input = case parse parseExpr "lisp" input of
|
||||||
Left err -> "No match: " ++ show err
|
Left err -> String $ "No match: " ++ show err
|
||||||
Right val -> show val
|
Right val -> val
|
||||||
|
|
||||||
showVal :: LispVal -> String
|
showVal :: LispVal -> String
|
||||||
showVal (String contents) = "\"" ++ contents ++ "\""
|
showVal (String contents) = "\"" ++ contents ++ "\""
|
||||||
|
@ -176,3 +174,12 @@ parseQuoted = do
|
||||||
char '\''
|
char '\''
|
||||||
x <- parseExpr
|
x <- parseExpr
|
||||||
return $ List [Atom "quote", x]
|
return $ List [Atom "quote", x]
|
||||||
|
|
||||||
|
-- Evaluation
|
||||||
|
eval :: LispVal -> LispVal
|
||||||
|
eval val@(Character _) = val
|
||||||
|
eval val@(String _) = val
|
||||||
|
eval val@(Number _) = val
|
||||||
|
eval val@(Float _) = val
|
||||||
|
eval val@(Bool _) = val
|
||||||
|
eval (List [Atom "quote", val]) = val
|
||||||
|
|
Loading…
Reference in a new issue