packages feed

egison 2.4.2 → 2.4.3

raw patch · 6 files changed

+43/−25 lines, 6 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Language.Egison.Types: MacroVarExpr :: String -> [EgisonExpr] -> EgisonExpr
+ Language.Egison.Types: MacroVarExpr :: String -> EgisonExpr
- Language.Egison.Types: PatVarOmitExpr :: EgisonExpr -> EgisonExpr
+ Language.Egison.Types: PatVarOmitExpr :: String -> [EgisonExpr] -> EgisonExpr
- Language.Egison.Types: VarOmitExpr :: EgisonExpr -> EgisonExpr
+ Language.Egison.Types: VarOmitExpr :: String -> [EgisonExpr] -> EgisonExpr

Files

egison.cabal view
@@ -1,5 +1,5 @@ Name:                egison-Version:             2.4.2+Version:             2.4.3 Synopsis:            An Interpreter and Compiler for the Programming Language Egison Description:         An interpreter and compiler for the programming language Egison.                      A feature of Egison is the strong pattern match facility.@@ -16,7 +16,8 @@ Build-type:          Simple Cabal-version:       >=1.8 -Data-files:          lib/core/base.egi lib/core/number.egi lib/core/collection.egi lib/core/array.egi lib/graph.egi lib/poker-hands.egi+Data-files:          lib/core/base.egi lib/core/number.egi lib/core/collection.egi lib/core/array.egi lib/core/pattern.egi+                     lib/graph.egi lib/poker-hands.egi                      sample/number-test.egi sample/collection-test.egi sample/array-test.egi sample/graph-test.egi                      sample/poker-hands-test.egi                      sample/io/argv-test.egi sample/io/cat.egi sample/io/copy.egi sample/io/char-test.egi sample/io/hello.egi sample/io/read-write-test.egi
hs-src/Language/Egison/Core.hs view
@@ -40,6 +40,7 @@   _ <- evalString env $ "(load \"lib/core/number.egi\")"   _ <- evalString env $ "(load \"lib/core/collection.egi\")"   _ <- evalString env $ "(load \"lib/core/array.egi\")"+  _ <- evalString env $ "(load \"lib/core/pattern.egi\")"   return ()    @@ -317,7 +318,6 @@                                        cEval1 (Closure newEnv body)     Value (Macro mArgs body) -> do argExprs <- liftThrows $ tupleExprToExprList argExpr                                    newBody <- expandMacro (Data.Map.fromList (zip mArgs argExprs)) body-                                   liftIO $ putStrLn $ showExpr newBody                                    cEval1 (Closure env newBody)     _ -> throwError $ Default "not function" cEval1 (Closure _ UndefinedExpr) = do
hs-src/Language/Egison/Macro.hs view
@@ -1,5 +1,6 @@ module Language.Egison.Macro where import Language.Egison.Types+import Control.Monad.Error import qualified Data.Map  type MacroFrame = Data.Map.Map String EgisonExpr@@ -12,16 +13,16 @@   case getExpr frame name of     Nothing -> return $ VarExpr name []     Just expr -> return expr-expandMacro frame (PatVarOmitExpr expr) = do-  newExpr <- expandMacro frame expr-  case newExpr of-    MacroVarExpr name numExprs -> return $ PatVarExpr name numExprs-    _ -> return $ PatVarOmitExpr newExpr-expandMacro frame (VarOmitExpr expr) = do-  newExpr <- expandMacro frame expr-  case newExpr of-    MacroVarExpr name numExprs -> return $ VarExpr name numExprs-    _ -> return $ VarOmitExpr newExpr+expandMacro frame (PatVarOmitExpr name nums) = do+  case getExpr frame name of+    Nothing -> throwError $ Default $ "no macro var: " ++ name+    Just (MacroVarExpr name2) -> return $ PatVarExpr name2 nums+    expr -> throwError $ Default $ "not macro var: " ++ show expr+expandMacro frame (VarOmitExpr name nums) = do+  case getExpr frame name of+    Nothing -> throwError $ Default $ "no macro var: " ++ name+    Just (MacroVarExpr name2) -> return $ VarExpr name2 nums+    expr -> throwError $ Default $ "not macro var: " ++ show expr expandMacro frame (InductiveDataExpr cons exprs) = do   newExprs <- mapM (expandMacro frame) exprs   return $ InductiveDataExpr cons newExprs
hs-src/Language/Egison/Parser.hs view
@@ -228,20 +228,21 @@ parseMacroVarExpr = do   char '%'   name <- identifier-  nums <- lexeme parseIndexNums-  return $ MacroVarExpr name nums+  return $ MacroVarExpr name  parsePatVarOmitExpr :: Parser EgisonExpr parsePatVarOmitExpr = do   string "$`"-  expr <- lexeme parseExpr-  return $ PatVarOmitExpr expr+  name <- identifier+  nums <- lexeme parseIndexNums+  return $ PatVarOmitExpr name nums  parseVarOmitExpr :: Parser EgisonExpr parseVarOmitExpr = do   char '`'-  expr <- lexeme parseExpr-  return $ VarOmitExpr expr+  name <- identifier+  nums <- lexeme parseIndexNums+  return $ VarOmitExpr name nums  parseArgs :: Parser ArgsExpr parseArgs = do
hs-src/Language/Egison/Types.hs view
@@ -84,9 +84,9 @@   | NumberExpr Integer   | FloatExpr Double   | VarExpr String [EgisonExpr]-  | MacroVarExpr String [EgisonExpr]-  | PatVarOmitExpr EgisonExpr-  | VarOmitExpr EgisonExpr+  | MacroVarExpr String+  | PatVarOmitExpr String [EgisonExpr]+  | VarOmitExpr String [EgisonExpr]   | PatVarExpr String [EgisonExpr]   | WildCardExpr   | ValuePatExpr EgisonExpr@@ -331,12 +331,12 @@ showExpr (NumberExpr contents) = show contents showExpr (FloatExpr contents) = show contents showExpr (VarExpr name nums) = name ++ unwordsNumExprs nums-showExpr (MacroVarExpr name nums) = "%" ++ name ++ unwordsNumExprs nums+showExpr (MacroVarExpr name) = "%" ++ name showExpr (PatVarExpr name nums) = "$" ++ name ++ unwordsNumExprs nums showExpr WildCardExpr = "_" showExpr (ValuePatExpr expr) = "," ++ showExpr expr-showExpr (PatVarOmitExpr pvar) = "$`" ++ showExpr pvar-showExpr (VarOmitExpr pvar) = "`" ++ showExpr pvar+showExpr (PatVarOmitExpr name nums) = "$`" ++ name ++ unwordsNumExprs nums+showExpr (VarOmitExpr name nums) = "`" ++ name ++ unwordsNumExprs nums showExpr (CutPatExpr _) = "#<cut-pat>" showExpr (NotPatExpr _) = "#<not-pat>" showExpr (AndPatExpr _) = "#<and-pat>"
+ lib/core/pattern.egi view
@@ -0,0 +1,15 @@+;;+;; Pattern.egi+;;++(define $comb+  (macro [$n $v]+    (loop $l $i (between 1 n) <join _ <cons $`v_i l>> _)))++(define $comb/double+  (macro [$n $v]+    (loop $l $i (between 1 n) <join _ (& <cons $`v_i _> l)> _)))++(define $cloop+  (macro [$n $v]+    (loop $l $i (between 1 n) {`v_i @l} {})))