Skip to content

Commit df63ac4

Browse files
committed
fix bug of eval [g_1_1]|x
1 parent d080dd5 commit df63ac4

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

hs-src/Language/Egison/Core.hs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,14 @@ evalExpr env (IndexedExpr bool expr indices) = do
289289
Userscript n -> evalExprDeep env n >>= extractScalar >>= return . Userscript
290290
) indices
291291
return $ Value (ScalarData (Div (Plus [(Term 1 [(Symbol id name js2, 1)])]) (Plus [(Term 1 [])])))
292-
(Value (ScalarData _)) -> do
293-
return $ tensor
292+
(Value (ScalarData (Div (Plus [(Term 1 [(Symbol id name js', 1)])]) (Plus [(Term 1 [])])))) -> do
293+
js2 <- mapM (\i -> case i of
294+
Superscript n -> evalExprDeep env n >>= extractScalar >>= return . Superscript
295+
Subscript n -> evalExprDeep env n >>= extractScalar >>= return . Subscript
296+
SupSubscript n -> evalExprDeep env n >>= extractScalar >>= return . SupSubscript
297+
Userscript n -> evalExprDeep env n >>= extractScalar >>= return . Userscript
298+
) indices
299+
return $ Value (ScalarData (Div (Plus [(Term 1 [(Symbol id name (js' ++ js2), 1)])]) (Plus [(Term 1 [])])))
294300
(Value (TensorData (Tensor ns xs is))) -> do
295301
if bool then tref js (Tensor ns xs js) >>= toTensor >>= tContract' >>= fromTensor >>= return . Value
296302
else tref (is ++ js) (Tensor ns xs (is ++ js)) >>= toTensor >>= tContract' >>= fromTensor >>= return . Value

hs-src/Language/Egison/Parser.hs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -172,19 +172,18 @@ exprs = endBy expr whiteSpace
172172

173173
expr :: Parser EgisonExpr
174174
expr = P.lexeme lexer (do expr0 <- expr' <|> quoteExpr'
175-
expr1 <- option expr0 $ try (do string "..."
176-
IndexedExpr False expr0 <$> parseindex)
175+
expr1 <- option expr0 $ try (string "..." >> IndexedExpr False expr0 <$> parseindex)
177176
<|> IndexedExpr True expr0 <$> parseindex
178177
option expr1 $ PowerExpr expr1 <$> (try $ char '^' >> expr'))
179178
where parseindex :: Parser [Index EgisonExpr]
180179
parseindex = many1 (try (do
181-
char '_'
182-
e1 <- expr'
183-
string "..._"
184-
e2 <- expr'
185-
return $ MultiSubscript e1 e2)
180+
char '_'
181+
e1 <- expr'
182+
string "..._"
183+
e2 <- expr'
184+
return $ MultiSubscript e1 e2)
186185
<|> try (do
187-
char '~'
186+
char '~'
188187
e1 <- expr'
189188
string "...~"
190189
e2 <- expr'

hs-src/Language/Egison/Types.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,6 +1180,8 @@ instance Show EgisonExpr where
11801180
show (VarExpr name) = show name
11811181
show (PartialVarExpr n) = "%" ++ show n
11821182
show (FunctionExpr args) = "(function [" ++ unwords (map show args) ++ "])"
1183+
show (IndexedExpr b expr idxs) = show expr ++ concatMap show idxs
1184+
show (TupleExpr exprs) = "[" ++ unwords (map show exprs) ++ "]"
11831185

11841186
show (ApplyExpr fn (TupleExpr [])) = "(" ++ show fn ++ ")"
11851187
show (ApplyExpr fn (TupleExpr args)) = "(" ++ show fn ++ " " ++ unwords (map show args) ++ ")"

0 commit comments

Comments
 (0)