From d694adfb957788137a2b5d89214f661f0148531d Mon Sep 17 00:00:00 2001 From: pingu Date: Wed, 15 Oct 2025 10:33:11 +0200 Subject: [PATCH] First attempt at tail recursion here --- sudoku.lispbm | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/sudoku.lispbm b/sudoku.lispbm index 87f8662..652f230 100644 --- a/sudoku.lispbm +++ b/sudoku.lispbm @@ -134,7 +134,7 @@ (defun printSudoku (m) (loopforeach i m (print i))) (defun solve (grid) - (let ((empties (findEmpty grid)) + (let ((solverHelper (lambda (grid grids) (let ((empties (findEmpty grid)) (size1 (foldr (lambda (x ys) (let ((e (match x @@ -154,17 +154,16 @@ (if (eq empties nil) (if (valid grid) grid - 'not-valid) + (solverHelper (car grids) (cdr grids))) (if (eq size1 nil) (match (car others) (((? es) (?r) (?c)) - (foldr - (lambda (e ys) (match (solve (place grid r c e)) - ('not-valid ys) - (xs xs))) - nil - es))) - (solve (foldr (lambda (x gs) - (match x - (((?e) (?r) (?c)) (place gs r c e)))) - grid size1)))))) + (let ((new (map (lambda (e) (place grid r c e)) es))) + (solverHelper (car new) (append (cdr new) grids))))) + (solverHelper + (foldr (lambda (x gs) + (match x + (((?e) (?r) (?c)) (place gs r c e)))) + grid size1) + grids))))))) + (solverHelper grid '())))