@@ -18,8 +18,6 @@ import Lang.Cast
18
18
import Lang.Common
19
19
import Mapping
20
20
21
- wip = error " WIP"
22
-
23
21
infixr 0 ?
24
22
W 誤 _ ? _ = Nothing
25
23
_ ? x = x
@@ -195,7 +193,7 @@ m n c x = (建名 n, 引機 (界機 (MkJJ界機物 n ce f (建參 ce) (建列[
195
193
W 構 _ xs -> Just (列To 物 xs)
196
194
_ -> Nothing )),
197
195
(fM[" 取" ," 未算" ]1 (\ [x] -> x? case x of
198
- W 名 x -> wip
196
+ W 名 x -> error " WIP "
199
197
_ -> Nothing )),
200
198
(建名[" 取" ], W 機 MappingNil (建列[建名[" x" ]]) (建列[建界名[" 算" ], 建列[建界名[" 取" ," 未算" ], 建名[" x" ]], 建界名[" 境" ," 空" ]])),
201
199
(fM[" 界" ," 含" ," ?" ]1 (\ [x] -> x? case x of
@@ -233,17 +231,25 @@ m n c x = (建名 n, 引機 (界機 (MkJJ界機物 n ce f (建參 ce) (建列[
233
231
機Get 物 _ = Nothing
234
232
235
233
算 :: W 物 -> Mapping M 名物 W 物 -> W 物
236
- 算 x@ (W 名 m) e = mappingRef e (名 m) (界誤 [" 算" ] [x,境To 物 e])
237
- 算 (W 首尾 y x) e | y == 用式名 = case x of
238
- W 首尾 f xs -> wip
239
- _ -> 界誤 [" 算" ] [x,境To 物 e]
234
+ 算 _x@ (W 名 m) e = mappingRef e (名 m) (界誤 [" 算" ] [_x,境To 物 e])
235
+ 算 _x@ (W 首尾 y x) e | y == 用式名 =
236
+ let r = do
237
+ W 首尾 f xs <- return x
238
+ xs' <- 物ToList xs
239
+ return (f, xs')
240
+ in case r of
241
+ Just (f, xs) -> case 算 f e of
242
+ W 引機 f -> 用 f ((境To 物 e) : xs)
243
+ W 譯機 f -> 算 (用 f xs) e
244
+ _ -> 界誤 [" 算" ] [_x,境To 物 e]
245
+ Nothing -> 界誤 [" 算" ] [_x,境To 物 e]
240
246
算 _x@ (W 首尾 y x) e | y == 用界名 = case x of
241
247
W 首尾 (W 名 m) W 空 -> mappingRef e (名 m) (界誤 [" 算" ] [_x,境To 物 e])
242
248
_ -> 界誤 [" 算" ] [_x,境To 物 e]
243
249
算 _x@ (W 首尾 f as) e = case 物ToList as of
244
- Just xs -> case 物To 機物 f of
245
- Just f -> 用 f ( map ( \ x -> 算 x e) xs)
246
- Nothing -> 界誤 [" 用" ] [f,as ]
250
+ Just xs -> let (xs', f') = ( map ( \ x -> 算 x e) xs, 算 f e) in case 物To 機物 f' of
251
+ Just f'' -> 用 f'' xs'
252
+ Nothing -> 界誤 [" 用" ] [f', 建列 xs' ]
247
253
Nothing -> 界誤 [" 算" ] [_x,境To 物 e]
248
254
算 x@ (W 誤 _) e = 界誤 [" 算" ] [x,境To 物 e]
249
255
算 x e = x
0 commit comments