File tree Expand file tree Collapse file tree 3 files changed +17
-10
lines changed Expand file tree Collapse file tree 3 files changed +17
-10
lines changed Original file line number Diff line number Diff line change @@ -289,8 +289,14 @@ evalExpr env (IndexedExpr bool expr indices) = do
289
289
Userscript n -> evalExprDeep env n >>= extractScalar >>= return . Userscript
290
290
) indices
291
291
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 [] )])))
294
300
(Value (TensorData (Tensor ns xs is))) -> do
295
301
if bool then tref js (Tensor ns xs js) >>= toTensor >>= tContract' >>= fromTensor >>= return . Value
296
302
else tref (is ++ js) (Tensor ns xs (is ++ js)) >>= toTensor >>= tContract' >>= fromTensor >>= return . Value
Original file line number Diff line number Diff line change @@ -172,19 +172,18 @@ exprs = endBy expr whiteSpace
172
172
173
173
expr :: Parser EgisonExpr
174
174
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)
177
176
<|> IndexedExpr True expr0 <$> parseindex
178
177
option expr1 $ PowerExpr expr1 <$> (try $ char ' ^' >> expr'))
179
178
where parseindex :: Parser [Index EgisonExpr ]
180
179
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)
186
185
<|> try (do
187
- char ' ~'
186
+ char ' ~'
188
187
e1 <- expr'
189
188
string " ...~"
190
189
e2 <- expr'
Original file line number Diff line number Diff line change @@ -1180,6 +1180,8 @@ instance Show EgisonExpr where
1180
1180
show (VarExpr name) = show name
1181
1181
show (PartialVarExpr n) = " %" ++ show n
1182
1182
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) ++ " ]"
1183
1185
1184
1186
show (ApplyExpr fn (TupleExpr [] )) = " (" ++ show fn ++ " )"
1185
1187
show (ApplyExpr fn (TupleExpr args)) = " (" ++ show fn ++ " " ++ unwords (map show args) ++ " )"
You can’t perform that action at this time.
0 commit comments