First attempt at tail recursion here

This commit is contained in:
2025-10-15 10:33:11 +02:00
parent 60fa13d0e2
commit d694adfb95

View File

@ -134,7 +134,7 @@
(defun printSudoku (m) (loopforeach i m (print i))) (defun printSudoku (m) (loopforeach i m (print i)))
(defun solve (grid) (defun solve (grid)
(let ((empties (findEmpty grid)) (let ((solverHelper (lambda (grid grids) (let ((empties (findEmpty grid))
(size1 (foldr (size1 (foldr
(lambda (x ys) (lambda (x ys)
(let ((e (match x (let ((e (match x
@ -154,17 +154,16 @@
(if (eq empties nil) (if (eq empties nil)
(if (valid grid) (if (valid grid)
grid grid
'not-valid) (solverHelper (car grids) (cdr grids)))
(if (eq size1 nil) (if (eq size1 nil)
(match (car others) (match (car others)
(((? es) (?r) (?c)) (((? es) (?r) (?c))
(foldr (let ((new (map (lambda (e) (place grid r c e)) es)))
(lambda (e ys) (match (solve (place grid r c e)) (solverHelper (car new) (append (cdr new) grids)))))
('not-valid ys) (solverHelper
(xs xs))) (foldr (lambda (x gs)
nil (match x
es))) (((?e) (?r) (?c)) (place gs r c e))))
(solve (foldr (lambda (x gs) grid size1)
(match x grids)))))))
(((?e) (?r) (?c)) (place gs r c e)))) (solverHelper grid '())))
grid size1))))))