From 07195be85e038d0b844d518398705f4513b92c42 Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Tue, 30 Sep 2025 12:37:37 +0300 Subject: [PATCH] 02: unique exprs: use reduced exprs set in next steps --- 02.hs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/02.hs b/02.hs index fc770f9..538fd47 100644 --- a/02.hs +++ b/02.hs @@ -157,7 +157,9 @@ upSyntesis examples steps = upSyntesisRec examples steps $ nextSimpleExprs termi ----- -upSyntesisStep' :: [Example] -> [Expr] -> [Expr] -> Either [Expr] Expr +data ExprsPair = ExprsPair [Expr] [Expr] + +upSyntesisStep' :: [Example] -> [Expr] -> [Expr] -> Either ExprsPair Expr upSyntesisStep' examples newExprs oldExprs = case find (isCorrect examples) newExprs of Just answer -> Right answer @@ -166,13 +168,13 @@ upSyntesisStep' examples newExprs oldExprs = let newExprs'' = foldl (\acc expr -> if any (areSame examples expr) acc then acc else expr : acc) [] newExprs' in -- merge same values Left $ -- nextSimpleExprs $ - nextExprs' newExprs'' oldExprs + ExprsPair (nextExprs' newExprs'' oldExprs) newExprs'' upSyntesisRec' :: [Example] -> Int -> [Expr] -> [Expr] -> Maybe Expr upSyntesisRec' _ 0 _ _ = Nothing upSyntesisRec' examples steps newExprs oldExprs = case upSyntesisStep' examples newExprs oldExprs of Right answer -> Just answer - Left exprs -> upSyntesisRec' examples (steps - 1) exprs (newExprs ++ oldExprs) + Left (ExprsPair newExprs' oldExprs') -> upSyntesisRec' examples (steps - 1) newExprs' (oldExprs' ++ oldExprs) upSyntesis' :: [Example] -> Int -> Maybe Expr upSyntesis' examples steps = upSyntesisRec' examples steps (nextSimpleExprs terminals) []