This commit is contained in:
voidlizard 2025-05-19 15:33:31 +03:00
parent 5f87d12551
commit 9f21d78416
1 changed files with 26 additions and 14 deletions

View File

@ -865,7 +865,7 @@ eval' dict0 syn' = handle (handleForm syn') $ do
p <- eval p' p <- eval p'
-- error $ show $ pretty p -- display_ $ "EVALUATED:" <+> pretty p
wat <- matched [p,e] <&> \case wat <- matched [p,e] <&> \case
ListVal es -> es ListVal es -> es
@ -875,6 +875,9 @@ eval' dict0 syn' = handle (handleForm syn') $ do
| ListVal [SymbolVal n,x] <- wat, n /= "_" | ListVal [SymbolVal n,x] <- wat, n /= "_"
] & HM.fromList ] & HM.fromList
-- display_ $ "WAT" <+> pretty wat
-- display_ $ "FOUND" <+> found
if List.null wat then if List.null wat then
next rest next rest
else do else do
@ -1829,7 +1832,9 @@ internalEntries = do
es -> pure $ mkForm "builtin:closure" [mkSym "bf6:list?", mkList es] es -> pure $ mkForm "builtin:closure" [mkSym "bf6:list?", mkList es]
entry $ bindMatch "bf6:list?" $ \case entry $ bindMatch "bf6:list?" $ \case
[a,b] -> termMatches (mkList [mkSym "bf6:list?", a]) b [a,b] -> do
termMatches (mkList [mkSym "bf6:list?", a]) b
e -> throwIO (BadFormException @c (mkList e)) e -> throwIO (BadFormException @c (mkList e))
entry $ bindMatch "?" $ \case entry $ bindMatch "?" $ \case
@ -2457,7 +2462,7 @@ matched = \case
syn <- apply_ a [b] syn <- apply_ a [b]
-- error $ show $ "AAAAA" <+> pretty a <+> pretty syn -- display_ $ show $ "AAAAA" <+> pretty a <+> pretty syn
(_,w) <- runWriterT $ scan syn (_,w) <- runWriterT $ scan syn
@ -2466,9 +2471,10 @@ matched = \case
where where
scan = \case scan = \case
ListVal [SymbolVal x, e] -> do ListVal [SymbolVal x, e] -> do
e' <- scan e -- display_ $ "KHUYAK" <+> pretty x <+> pretty e
tell [(x, e')] -- e' <- scan e
pure e' tell [(x, e)]
pure e
ListVal es -> do ListVal es -> do
es' <- mapM scan es es' <- mapM scan es
@ -2519,10 +2525,16 @@ termMatches pred what = case (pred, what) of
(ListVal [SymbolVal "bf6:list?", a@(ListVal as)], b@(ListVal bs)) -> do (ListVal [SymbolVal "bf6:list?", a@(ListVal as)], b@(ListVal bs)) -> do
maybe nil mkList <$> runMaybeT do maybe nil mkList <$> runMaybeT do
for (emit as bs) $ \case for (emit as bs) $ \syn -> do
case syn of
Nothing -> mzero Nothing -> mzero
Just (SymbolVal w, b) -> do Just (SymbolVal w, b) -> do
-- error $ show $ "right fucking here 111" <+> pretty w <+> "->" <+> pretty b
pure $ mkList [mkSym w, b] pure $ mkList [mkSym w, b]
Just (a,b) -> lift (apply_ a [b]) >>= \case Just (a,b) -> lift (apply_ a [b]) >>= \case
ListVal (e:es) -> pure (mkList (e:es)) ListVal (e:es) -> pure (mkList (e:es))
e | e /= nil -> pure $ mkList [mkSym "_", e] e | e /= nil -> pure $ mkList [mkSym "_", e]